game-plugin-oneshot
GAME SDK plugin that gives Virtuals Protocol agents access to OneShot real-world tools.
Install
pip install game-plugin-oneshot
Quick Start
import os
from game_sdk.game.agent import Agent
from game_plugin_oneshot import OneShotPlugin
plugin = OneShotPlugin(
private_key=os.environ["WALLET_PRIVATE_KEY"],
)
agent = Agent(
api_key=os.environ["GAME_API_KEY"],
name="my-agent",
agent_description="An agent that can interact with the real world",
)
agent.add_worker(plugin.get_worker())
agent.run()
Access-token sessions
Use a delegated token for hosted GAME agents that should not hold a wallet key:
import os
from game_plugin_oneshot import OneShotPlugin
plugin = OneShotPlugin(access_token=os.environ["ONESHOT_ACCESS_TOKEN"])
# Inside an async application:
# plugin = await OneShotPlugin.acreate(access_token=os.environ["ONESHOT_ACCESS_TOKEN"])
Create the token and configure budgets from a wallet session. Calls spend prepaid
credits and respect the stored caps. Tokens cannot manage tokens, raise budgets,
or sign USDC payments. Refill credits from a wallet session with
OneShotClient.top_up_credits(amount). See the
hosted setup guide.
Tools
All 35 OneShot tools (same set as the MCP server and langchain-oneshot):
| Tool | Description | Paid? |
|---|---|---|
oneshot_email |
Send emails to real recipients | paid |
oneshot_sms |
Send SMS text messages | paid |
oneshot_voice |
Make phone calls with an AI voice agent | paid |
oneshot_research |
Deep research reports | paid |
oneshot_web_search |
Web search (fast, synchronous) | paid |
oneshot_web_read |
Read a web page as markdown | paid |
oneshot_people_search |
Search people by title/company/location | paid |
oneshot_enrich_profile |
Enrich a profile from LinkedIn/email/name | paid |
oneshot_find_email |
Find an email at a company | paid |
oneshot_verify_email |
Verify email deliverability | paid |
oneshot_deep_research_person |
Full background report on a person | paid |
oneshot_social_profiles |
Find someone's social accounts | paid |
oneshot_article_search |
Articles/interviews about a person | paid |
oneshot_person_newsfeed |
Recent social posts for a person | paid |
oneshot_person_interests |
What a person cares about | paid |
oneshot_person_interactions |
Followers/following/replies | paid |
oneshot_commerce_search |
Search for products | free |
oneshot_commerce_buy |
Purchase products online | paid |
oneshot_build |
Generate and deploy a website | paid |
oneshot_update_build |
Update an existing website | paid |
oneshot_browser |
Browser automation task | paid |
oneshot_browser_create_profile |
Create a persistent browser profile | free |
oneshot_browser_list_profiles |
List browser profiles | free |
oneshot_browser_delete_profile |
Delete a browser profile | free |
oneshot_inbox_list |
List inbound emails | free |
oneshot_inbox_get |
Get an inbound email by ID | free |
oneshot_sms_inbox_list |
List inbound SMS | free |
oneshot_sms_inbox_get |
Get an inbound SMS by ID | free |
oneshot_notifications |
List agent notifications | free |
oneshot_mark_notification_read |
Mark a notification as read | free |
oneshot_get_balance |
Get USDC + credits balance | free |
oneshot_budget_status |
Today's spend vs the configured budget (read-only) | free |
oneshot_list_domains |
List sending domains with reputation + rotation state | free |
oneshot_pause_domain |
Take a domain out of rotation | free |
oneshot_resume_domain |
Put a paused domain back into rotation | free |
Paid tools are priced in USDC via x402. See Pricing for current rates.
Payment
All paid tools use the x402 payment protocol to deduct USDC from your wallet on Base Mainnet. Fund your wallet with USDC before using paid tools.
Read tools (inbox, SMS inbox, notifications, balance) 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. Handled automatically by the underlying oneshot-python client — requires oneshot-python >= 0.18.0 (already the dependency floor).
Complex Arguments
GAME Argument only supports scalar types. For tools that need structured input (commerce_buy, build, update_build), pass JSON strings; list fields on people_search accept comma-separated values:
# The agent will generate these automatically, but for manual testing:
import json
shipping = json.dumps({
"first_name": "John",
"last_name": "Doe",
"street": "123 Main St",
"city": "Austin",
"state": "TX",
"zip_code": "78701",
"phone": "+15551234567",
})
product = json.dumps({
"name": "Acme SaaS",
"description": "Project management for teams",
})
Configuration
| Parameter | Default | Description |
|---|---|---|
private_key |
(required) | Hex-encoded Ethereum private key |
base_url |
None |
Override API URL |
budgets |
None |
Server-enforced spend cap, e.g. {"daily": 50, "per_transaction": 5} |
alert_email |
None |
Email for budget alerts |
Requirements
- Python >= 3.10
game-sdk >= 0.1.5oneshot-python >= 0.18.0
Links
- Documentation
- langchain-oneshot on PyPI — Full 34-tool LangChain integration
- oneshot-python on PyPI — Core HTTP client
- 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 game-plugin-oneshot 0.15.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| game_plugin_oneshot-0.15.0.tar.gz | 97.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| game_plugin_oneshot-0.15.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 114.6 kB
Release files / game_plugin_oneshot-0.15.0.tar.gz
| Download URL | game_plugin_oneshot-0.15.0.tar.gz |
|---|---|
| Size | 97.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
60fda4b30986d9c3e401dbb486602283dc6da0a1eca4e7b8fa4dd9b9214860c1
|
|
BLAKE2b-256 checksum How to use checksums |
7469e1af6660b452d62ae5f73a893f86d2541451929df3606b910333a7e5ebc8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / game_plugin_oneshot-0.15.0-py3-none-any.whl
| Download URL | game_plugin_oneshot-0.15.0-py3-none-any.whl |
|---|---|
| Size | 17.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5fa556acb3c98cea0694f45a567516636c1fe7d9998f99e616a1e79de91d2a5b
|
|
BLAKE2b-256 checksum How to use checksums |
d4e983aef451470eae3fdcf370a4f063a070c7b7d50e9827e126caf6ff4fa0aa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|