langchain-oneshot
LangChain tools for OneShot — commercial actions for AI agents.
Provides 43 tools as LangChain BaseTool subclasses with automatic x402 payment handling via USDC on Base.
Installation
pip install langchain-oneshot
Quick Start
from langchain_oneshot import OneShotToolkit
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
toolkit = OneShotToolkit.from_private_key(
private_key="0x...",
)
# Use all 43 tools with a LangGraph agent
tools = toolkit.get_tools()
llm = ChatOpenAI(model="gpt-4o")
agent = create_react_agent(llm, tools)
result = agent.invoke({
"messages": [("user", "Research the latest AI agent frameworks")]
})
Access-token sessions
Hosted agents can use prepaid credits without holding a wallet key:
import os
from langchain_oneshot import OneShotToolkit
toolkit = OneShotToolkit.from_access_token(os.environ["ONESHOT_ACCESS_TOKEN"])
# Inside an async application:
# toolkit = await OneShotToolkit.afrom_access_token(os.environ["ONESHOT_ACCESS_TOKEN"])
tools = toolkit.get_tools()
Mint the token and set budgets from a wallet session. Token calls spend the agent's
credits and respect its stored caps; they cannot change budgets or manage tokens.
An insufficient balance raises InsufficientCreditsError. Fund credits from a wallet
with OneShotClient.top_up_credits(amount) and retry. See the
hosted setup guide.
Individual Tools
from langchain_oneshot import OneShotClient, ResearchTool
client = OneShotClient(private_key="0x...")
research = ResearchTool(client=client)
result = research.invoke({"topic": "AI agent frameworks 2026"})
Available Tools
| Tool | Description |
|---|---|
oneshot_email |
Send emails |
oneshot_voice |
Make phone calls |
oneshot_sms |
Send SMS messages |
oneshot_research |
Deep web research |
oneshot_web_search |
Search the web |
oneshot_web_read |
Read a web page as markdown |
oneshot_people_search |
Search for people |
oneshot_enrich_profile |
Enrich a profile |
oneshot_find_email |
Find email address |
oneshot_verify_email |
Verify email |
oneshot_deep_research_person |
Full dossier on a person |
oneshot_social_profiles |
Find all social accounts |
oneshot_article_search |
Find articles about a person |
oneshot_person_newsfeed |
Recent social posts |
oneshot_person_interests |
Analyze interests |
oneshot_person_interactions |
Map followers/following |
oneshot_commerce_search |
Search products |
oneshot_commerce_buy |
Purchase product |
oneshot_build |
Build a website |
oneshot_update_build |
Update a website |
oneshot_browser |
Browser automation task |
oneshot_browser_create_profile |
Create a browser profile |
oneshot_browser_list_profiles |
List browser profiles |
oneshot_browser_delete_profile |
Delete a browser profile |
oneshot_inbox_list |
List inbox emails |
oneshot_inbox_get |
Get email by ID |
oneshot_sms_inbox_list |
List SMS inbox |
oneshot_sms_inbox_get |
Get SMS by ID |
oneshot_notifications |
List notifications |
oneshot_mark_notification_read |
Mark read |
oneshot_get_balance |
USDC balance |
oneshot_budget_status |
Today's spend vs the configured budget (read-only) |
oneshot_linkedin_connect |
Hosted login link for a human to connect their LinkedIn account (free) |
oneshot_linkedin_accounts |
Connected LinkedIn accounts / pending connection status (free) |
oneshot_linkedin_sync |
One bounded, resumable LinkedIn history-sync run (paid) |
oneshot_linkedin_conversations |
Synced LinkedIn conversations with coverage state (free) |
oneshot_linkedin_messages |
Synced LinkedIn messages, filterable by direction / since (free) |
oneshot_linkedin_reply |
Send a reply through the connected account (paid, idempotent) |
oneshot_linkedin_view_profile |
View a profile through the connected account (paid) |
oneshot_linkedin_react |
React to a post through the connected account (paid) |
oneshot_list_domains |
Sending domains + reputation/rotation state |
oneshot_pause_domain |
Take a domain out of rotation |
oneshot_resume_domain |
Put a paused domain back into rotation |
Paid tools are priced in USDC via x402. See Pricing for current rates.
How Payments Work
Paid tools use the x402 protocol. When a tool requires payment:
- The client POSTs to the tool endpoint
- The API returns
402 Payment Requiredwith a quote - The client signs a USDC
TransferWithAuthorization(EIP-3009) using your private key - The client re-POSTs with the signed payment header
- The API processes the request and returns the result
All payment signing happens locally — your private key never leaves your machine.
Read tools (inbox, SMS inbox, notifications, balance, browser profiles) additionally send a signed EIP-712 read proof (x-agent-proof) so the API can verify you control the X-Agent-ID wallet before returning private data. This is handled by the underlying oneshot-python client — no extra code. Requires oneshot-python >= 0.18.0 (already the dependency floor).
Configuration
toolkit = OneShotToolkit.from_private_key("0x...")
# Custom API URL
toolkit = OneShotToolkit.from_private_key("0x...", base_url="https://custom-api.example.com")
The SDK operates on Base Mainnet with real USDC. Fund your wallet before making paid tool calls.
Spend budget
toolkit = OneShotToolkit.from_private_key(
"0x...",
budgets={"daily": 50, "per_transaction": 5, "alert_at": 0.8},
alert_email="you@example.com",
)
Enforced server-side on every paid call (403 budget_exceeded → oneshot.BudgetExceededError). The agent can read its utilization with oneshot_budget_status but cannot change the cap. Requires oneshot-python >= 0.20.0.
Requirements
- Python 3.10+
langchain-core >= 0.3.0oneshot-python >= 0.18.0pydantic >= 2.0
Links
- Documentation
- oneshot-python on PyPI — Core HTTP client (dependency)
- TypeScript SDK
- MCP Server
- GitHub
License
MIT
LinkedIn connection recovery
If the active account list is empty or an account is deleted_upstream or
revoked, ask the human to use oneshot_linkedin_connect and authorize fresh
grants. An existing account with reconnect_required needs reconnect through
the owning application. Reconnect and revoke are intentionally not agent tools.
Do not automatically create a new connection in response to authentication
failures or timeouts.
Metadata
Release files for langchain-oneshot 0.15.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| langchain_oneshot-0.15.1.tar.gz | 133.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| langchain_oneshot-0.15.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 161.5 kB
Release files / langchain_oneshot-0.15.1.tar.gz
| Download URL | langchain_oneshot-0.15.1.tar.gz |
|---|---|
| Size | 133.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
38cf51fc5c475202f1b39ebbd82a55faa0533076b6076e36a14581ae61dfb3eb
|
|
BLAKE2b-256 checksum How to use checksums |
4550fd984253c58ab1fe13ce790534d5aa7dff7f219e72db91369540d4065cef
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / langchain_oneshot-0.15.1-py3-none-any.whl
| Download URL | langchain_oneshot-0.15.1-py3-none-any.whl |
|---|---|
| Size | 27.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
73b8a722a7ce1af4821f6463bb0dc9d8a8a6f4cbeda188b5ca8b01df454243a5
|
|
BLAKE2b-256 checksum How to use checksums |
4aeb5d7818f27633d5ae512bc6fa28a63202e7f1813123816fd5fa87ca13ce0d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|