@oneshot-agent/mcp-server 0.3.2 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,10 +10,17 @@ npm install -g @oneshot-agent/mcp-server
10
10
 
11
11
  ## Configuration
12
12
 
13
+ The server supports two auth methods: **CDP Wallet** (recommended, no private keys in config) or a raw private key.
14
+
13
15
  ### Environment Variables
14
16
 
15
- - `ONESHOT_WALLET_PRIVATE_KEY` (required): Your agent's private key for signing payments
16
- - `ONESHOT_TEST_MODE`: Set to "false" for production (default: "true" - uses testnet)
17
+ | Variable | Required | Description |
18
+ |----------|----------|-------------|
19
+ | `CDP_API_KEY_ID` | Option A | Coinbase CDP API key ID |
20
+ | `CDP_API_KEY_SECRET` | Option A | Coinbase CDP API key secret |
21
+ | `CDP_WALLET_SECRET` | Option A | Coinbase CDP wallet secret |
22
+ | `ONESHOT_WALLET_PRIVATE_KEY` | Option B | Raw private key for signing payments |
23
+ | `ONESHOT_TEST_MODE` | No | Set to `"false"` for production (default: `"true"`) |
17
24
 
18
25
  ### Claude Desktop
19
26
 
@@ -26,7 +33,9 @@ Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
26
33
  "command": "npx",
27
34
  "args": ["-y", "@oneshot-agent/mcp-server"],
28
35
  "env": {
29
- "ONESHOT_WALLET_PRIVATE_KEY": "0xYourPrivateKey"
36
+ "CDP_API_KEY_ID": "your-api-key-id",
37
+ "CDP_API_KEY_SECRET": "your-api-key-secret",
38
+ "CDP_WALLET_SECRET": "your-wallet-secret"
30
39
  }
31
40
  }
32
41
  }
@@ -44,7 +53,9 @@ Add to `.cursor/mcp.json` in your project:
44
53
  "command": "npx",
45
54
  "args": ["-y", "@oneshot-agent/mcp-server"],
46
55
  "env": {
47
- "ONESHOT_WALLET_PRIVATE_KEY": "0xYourPrivateKey"
56
+ "CDP_API_KEY_ID": "your-api-key-id",
57
+ "CDP_API_KEY_SECRET": "your-api-key-secret",
58
+ "CDP_WALLET_SECRET": "your-wallet-secret"
48
59
  }
49
60
  }
50
61
  }
@@ -62,13 +73,17 @@ Add to `~/.claude/settings.json`:
62
73
  "command": "npx",
63
74
  "args": ["-y", "@oneshot-agent/mcp-server"],
64
75
  "env": {
65
- "ONESHOT_WALLET_PRIVATE_KEY": "0xYourPrivateKey"
76
+ "CDP_API_KEY_ID": "your-api-key-id",
77
+ "CDP_API_KEY_SECRET": "your-api-key-secret",
78
+ "CDP_WALLET_SECRET": "your-wallet-secret"
66
79
  }
67
80
  }
68
81
  }
69
82
  }
70
83
  ```
71
84
 
85
+ Get CDP credentials at [Coinbase Agentic Wallet](https://docs.cdp.coinbase.com/agentic-wallet/welcome). Or use `ONESHOT_WALLET_PRIVATE_KEY` instead of CDP env vars for raw key auth.
86
+
72
87
  ## Available Tools
73
88
 
74
89
  ### Communication
@@ -98,6 +113,25 @@ Add to `~/.claude/settings.json`:
98
113
  | `oneshot_find_email` | Find someone's email address | ~$0.10 |
99
114
  | `oneshot_verify_email` | Verify email deliverability | ~$0.01 |
100
115
 
116
+ ### Person Intelligence
117
+
118
+ | Tool | Description | Cost |
119
+ |------|-------------|------|
120
+ | `oneshot_deep_research_person` | Full dossier on a person (2-5 min) | ~$0.50 |
121
+ | `oneshot_social_profiles` | Find all social accounts for a person | ~$0.05 |
122
+ | `oneshot_article_search` | Find articles about a person | ~$0.10 |
123
+ | `oneshot_person_newsfeed` | Recent social posts with engagement | ~$0.05 |
124
+ | `oneshot_person_interests` | Analyze interests across categories | ~$0.05 |
125
+ | `oneshot_person_interactions` | Map followers, following, replies | ~$0.10 |
126
+
127
+ ### Web
128
+
129
+ | Tool | Description | Cost |
130
+ |------|-------------|------|
131
+ | `oneshot_web_search` | Search the web | ~$0.02 |
132
+ | `oneshot_web_read` | Read any URL as markdown + screenshot | ~$0.02 |
133
+ | `oneshot_browser` | Autonomous browser — navigate, click, extract | ~$0.10+ |
134
+
101
135
  ### Commerce
102
136
 
103
137
  | Tool | Description | Cost |
@@ -109,8 +143,8 @@ Add to `~/.claude/settings.json`:
109
143
 
110
144
  | Tool | Description | Cost |
111
145
  |------|-------------|------|
112
- | `oneshot_build` | Build digital assets (sites, apps, social) | ~$149+ |
113
- | `oneshot_update_build` | Update an existing build | Discounted |
146
+ | `oneshot_build` | Build and deploy production websites | ~$10+ |
147
+ | `oneshot_update_build` | Update an existing website | Discounted |
114
148
 
115
149
  ### Account
116
150
 
@@ -207,13 +241,14 @@ Use oneshot_inbox_list:
207
241
 
208
242
  ## Funding Your Agent
209
243
 
210
- Fund your agent wallet at [oneshotagent.com](https://oneshotagent.com) with USDC on Base network.
211
-
212
- - **Test Mode** (default): Uses Base Sepolia testnet - get test USDC from faucets
213
- - **Production Mode**: Uses Base Mainnet - requires real USDC
244
+ - **Test Mode** (default): Uses Base Sepolia testnet — get free test USDC from the [Circle Faucet](https://faucet.circle.com/) (select Base Sepolia)
245
+ - **Production Mode**: Uses Base Mainnet — send USDC to your agent's wallet address on Base
214
246
 
215
247
  ## Links
216
248
 
217
- - [Documentation](https://docs.oneshotagent.com)
249
+ - [Documentation](https://docs.oneshotagent.com/sdk/mcp)
218
250
  - [Pricing](https://docs.oneshotagent.com/pricing)
219
- - [SDK](https://www.npmjs.com/package/@oneshot-agent/sdk)
251
+ - [TypeScript SDK](https://www.npmjs.com/package/@oneshot-agent/sdk)
252
+ - [Python SDK (LangChain)](https://pypi.org/project/langchain-oneshot/)
253
+ - [Python SDK (Core)](https://pypi.org/project/oneshot-python/)
254
+ - [GitHub](https://github.com/oneshot-agent/sdk)
package/dist/index.js CHANGED
@@ -4,37 +4,44 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
4
4
  import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
5
5
  import { OneShot } from "@oneshot-agent/sdk";
6
6
  import { tools, handleToolCall } from "./tools/index.js";
7
+ const CDP_KEY_ID = process.env.CDP_API_KEY_ID;
7
8
  const PRIVATE_KEY = process.env.ONESHOT_WALLET_PRIVATE_KEY;
8
9
  const TEST_MODE = process.env.ONESHOT_TEST_MODE !== "false"; // Default to test mode
9
- if (!PRIVATE_KEY) {
10
- console.error("Error: ONESHOT_WALLET_PRIVATE_KEY environment variable is required");
10
+ async function initAgent() {
11
+ if (CDP_KEY_ID) {
12
+ // Preferred: Coinbase CDP Server Wallet (no private key exposure)
13
+ console.error("Using Coinbase CDP wallet");
14
+ return OneShot.create({ cdp: true, testMode: TEST_MODE });
15
+ }
16
+ if (PRIVATE_KEY) {
17
+ // Fallback: raw private key
18
+ return new OneShot({ privateKey: PRIVATE_KEY, testMode: TEST_MODE });
19
+ }
20
+ console.error("Error: Set CDP_API_KEY_ID + CDP_API_KEY_SECRET + CDP_WALLET_SECRET (recommended)\n" +
21
+ " or ONESHOT_WALLET_PRIVATE_KEY");
11
22
  process.exit(1);
12
23
  }
13
- // Initialize OneShot SDK
14
- const agent = new OneShot({
15
- privateKey: PRIVATE_KEY,
16
- testMode: TEST_MODE,
17
- });
18
- // Create MCP server
19
- const server = new Server({
20
- name: "oneshot-mcp",
21
- version: "0.1.0",
22
- }, {
23
- capabilities: {
24
- tools: {},
25
- },
26
- });
27
- // List available tools
28
- server.setRequestHandler(ListToolsRequestSchema, async () => {
29
- return { tools };
30
- });
31
- // Handle tool calls
32
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
33
- const { name, arguments: args } = request.params;
34
- return handleToolCall(agent, name, args || {});
35
- });
36
24
  // Start server
37
25
  async function main() {
26
+ const agent = await initAgent();
27
+ // Create MCP server
28
+ const server = new Server({
29
+ name: "oneshot-mcp",
30
+ version: "0.3.3",
31
+ }, {
32
+ capabilities: {
33
+ tools: {},
34
+ },
35
+ });
36
+ // List available tools
37
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
38
+ return { tools };
39
+ });
40
+ // Handle tool calls
41
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
42
+ const { name, arguments: args } = request.params;
43
+ return handleToolCall(agent, name, args || {});
44
+ });
38
45
  const transport = new StdioServerTransport();
39
46
  await server.connect(transport);
40
47
  console.error(`OneShot MCP server running (testMode: ${TEST_MODE})`);
@@ -0,0 +1,4 @@
1
+ import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ import { OneShot } from "@oneshot-agent/sdk";
3
+ export declare const browserTool: Tool;
4
+ export declare function handleBrowser(agent: OneShot, args: Record<string, unknown>): Promise<import("@oneshot-agent/sdk").BrowserResult>;
@@ -0,0 +1,40 @@
1
+ export const browserTool = {
2
+ name: "oneshot_browser",
3
+ description: "Automate web browsing tasks using AI. Navigate websites, extract data, fill forms, and perform multi-step workflows using natural language instructions. Costs ~$0.05-0.25 per task depending on complexity.",
4
+ inputSchema: {
5
+ type: "object",
6
+ properties: {
7
+ task: {
8
+ type: "string",
9
+ description: "Natural language instruction for what to do in the browser (min 10 characters)",
10
+ },
11
+ output_schema: {
12
+ type: "object",
13
+ description: "JSON schema for structured output extraction (optional)",
14
+ },
15
+ start_url: {
16
+ type: "string",
17
+ description: "Initial URL to navigate to (optional)",
18
+ },
19
+ allowed_domains: {
20
+ type: "array",
21
+ items: { type: "string" },
22
+ description: "Restrict browsing to these domains (optional)",
23
+ },
24
+ max_steps: {
25
+ type: "number",
26
+ description: "Maximum browser steps (1-100, default: 50)",
27
+ },
28
+ },
29
+ required: ["task"],
30
+ },
31
+ };
32
+ export async function handleBrowser(agent, args) {
33
+ return agent.browser({
34
+ task: args.task,
35
+ output_schema: args.output_schema,
36
+ start_url: args.start_url,
37
+ allowed_domains: args.allowed_domains,
38
+ max_steps: args.max_steps,
39
+ });
40
+ }
@@ -1,6 +1,6 @@
1
1
  export const buildTool = {
2
2
  name: "oneshot_build",
3
- description: "Build digital assets - websites, apps, social media presence, portfolios, and more. Base price ~$149 includes 3 sections. Additional fees for extra sections, AI images, lead capture, custom domain, etc.",
3
+ description: "Build and deploy production websites - SaaS landing pages, portfolios, agency sites, restaurant pages, event sites, and more. Creates fully-functional sites with real hosting. Base price ~$10 includes 3 sections. Additional fees for extra sections, AI images, lead capture, custom domain, etc.",
4
4
  inputSchema: {
5
5
  type: "object",
6
6
  properties: {
@@ -98,7 +98,7 @@ export const buildTool = {
98
98
  };
99
99
  export const updateBuildTool = {
100
100
  name: "oneshot_update_build",
101
- description: "Update an existing build (website, app, social presence). Requires the build_id from a previous build. Updates reuse existing infrastructure at a discounted rate.",
101
+ description: "Update an existing website with new content or configuration. Requires the build_id from a previous build. Updates reuse existing hosting infrastructure at a discounted rate.",
102
102
  inputSchema: {
103
103
  type: "object",
104
104
  properties: {
@@ -10,6 +10,10 @@ import { smsInboxListTool, smsInboxGetTool, handleSmsInboxList, handleSmsInboxGe
10
10
  import { notificationsTool, markReadTool, handleNotifications, handleMarkRead } from "./notifications.js";
11
11
  import { getBalanceTool, handleGetBalance } from "./wallet.js";
12
12
  import { buildTool, updateBuildTool, handleBuild, handleUpdateBuild } from "./build.js";
13
+ import { browserTool, handleBrowser } from "./browser.js";
14
+ import { webSearchTool, handleWebSearch } from "./search.js";
15
+ import { webReadTool, handleWebRead } from "./web-read.js";
16
+ import { deepResearchPersonTool, socialProfilesTool, articleSearchTool, personNewsfeedTool, personInterestsTool, personInteractionsTool, handleDeepResearchPerson, handleSocialProfiles, handleArticleSearch, handlePersonNewsfeed, handlePersonInterests, handlePersonInteractions } from "./nyne.js";
13
17
  // All available tools
14
18
  export const tools = [
15
19
  // Communication
@@ -27,12 +31,23 @@ export const tools = [
27
31
  enrichProfileTool,
28
32
  findEmailTool,
29
33
  verifyEmailTool,
34
+ webSearchTool,
35
+ deepResearchPersonTool,
36
+ socialProfilesTool,
37
+ articleSearchTool,
38
+ personNewsfeedTool,
39
+ personInterestsTool,
40
+ personInteractionsTool,
30
41
  // Commerce
31
42
  commerceSearchTool,
32
43
  commerceBuyTool,
33
44
  // Build
34
45
  buildTool,
35
46
  updateBuildTool,
47
+ // Browser
48
+ browserTool,
49
+ // Web Read
50
+ webReadTool,
36
51
  // Account
37
52
  notificationsTool,
38
53
  markReadTool,
@@ -55,12 +70,23 @@ const handlers = {
55
70
  "oneshot_enrich_profile": handleEnrichProfile,
56
71
  "oneshot_find_email": handleFindEmail,
57
72
  "oneshot_verify_email": handleVerifyEmail,
73
+ "oneshot_web_search": handleWebSearch,
74
+ "oneshot_deep_research_person": handleDeepResearchPerson,
75
+ "oneshot_social_profiles": handleSocialProfiles,
76
+ "oneshot_article_search": handleArticleSearch,
77
+ "oneshot_person_newsfeed": handlePersonNewsfeed,
78
+ "oneshot_person_interests": handlePersonInterests,
79
+ "oneshot_person_interactions": handlePersonInteractions,
58
80
  // Commerce
59
81
  "oneshot_commerce_search": handleCommerceSearch,
60
82
  "oneshot_commerce_buy": handleCommerceBuy,
61
83
  // Build
62
84
  "oneshot_build": handleBuild,
63
85
  "oneshot_update_build": handleUpdateBuild,
86
+ // Browser
87
+ "oneshot_browser": handleBrowser,
88
+ // Web Read
89
+ "oneshot_web_read": handleWebRead,
64
90
  // Account
65
91
  "oneshot_notifications": handleNotifications,
66
92
  "oneshot_mark_notification_read": handleMarkRead,
@@ -0,0 +1,14 @@
1
+ import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ import { OneShot } from "@oneshot-agent/sdk";
3
+ export declare const deepResearchPersonTool: Tool;
4
+ export declare const socialProfilesTool: Tool;
5
+ export declare const articleSearchTool: Tool;
6
+ export declare const personNewsfeedTool: Tool;
7
+ export declare const personInterestsTool: Tool;
8
+ export declare const personInteractionsTool: Tool;
9
+ export declare function handleDeepResearchPerson(agent: OneShot, args: Record<string, unknown>): Promise<any>;
10
+ export declare function handleSocialProfiles(agent: OneShot, args: Record<string, unknown>): Promise<any>;
11
+ export declare function handleArticleSearch(agent: OneShot, args: Record<string, unknown>): Promise<any>;
12
+ export declare function handlePersonNewsfeed(agent: OneShot, args: Record<string, unknown>): Promise<any>;
13
+ export declare function handlePersonInterests(agent: OneShot, args: Record<string, unknown>): Promise<any>;
14
+ export declare function handlePersonInteractions(agent: OneShot, args: Record<string, unknown>): Promise<any>;
@@ -0,0 +1,116 @@
1
+ export const deepResearchPersonTool = {
2
+ name: "oneshot_deep_research_person",
3
+ description: "Deep research on a person — returns career history, social presence, interests, and connections. Takes 2-5 minutes. Costs ~$0.50.",
4
+ inputSchema: {
5
+ type: "object",
6
+ properties: {
7
+ email: { type: "string", description: "Person's email address" },
8
+ social_media_url: { type: "string", description: "LinkedIn, Twitter, or other social profile URL" },
9
+ name: { type: "string", description: "Person's full name" },
10
+ company: { type: "string", description: "Company name (helps disambiguate)" },
11
+ },
12
+ },
13
+ };
14
+ export const socialProfilesTool = {
15
+ name: "oneshot_social_profiles",
16
+ description: "Discover all social media profiles for a person across platforms (LinkedIn, Twitter, GitHub, YouTube, etc). Costs ~$0.05.",
17
+ inputSchema: {
18
+ type: "object",
19
+ properties: {
20
+ email: { type: "string", description: "Person's email address" },
21
+ social_media_url: { type: "string", description: "Known social profile URL to start from" },
22
+ },
23
+ },
24
+ };
25
+ export const articleSearchTool = {
26
+ name: "oneshot_article_search",
27
+ description: "Find articles, publications, and interviews about a person. Requires name and company. Costs ~$0.10.",
28
+ inputSchema: {
29
+ type: "object",
30
+ properties: {
31
+ name: { type: "string", description: "Person's full name" },
32
+ company: { type: "string", description: "Company name or domain" },
33
+ sort: { type: "string", enum: ["recent", "popular"], description: "Sort order (default: recent)" },
34
+ limit: { type: "number", description: "Max results 1-20 (default: 5)" },
35
+ },
36
+ required: ["name", "company"],
37
+ },
38
+ };
39
+ export const personNewsfeedTool = {
40
+ name: "oneshot_person_newsfeed",
41
+ description: "Get a person's recent social media posts with likes, replies, and shares. Costs ~$0.05.",
42
+ inputSchema: {
43
+ type: "object",
44
+ properties: {
45
+ social_media_url: { type: "string", description: "Social profile URL (Twitter, LinkedIn, etc)" },
46
+ },
47
+ required: ["social_media_url"],
48
+ },
49
+ };
50
+ export const personInterestsTool = {
51
+ name: "oneshot_person_interests",
52
+ description: "Figure out what someone cares about — sports, politics, tech, entertainment, etc. Costs ~$0.05.",
53
+ inputSchema: {
54
+ type: "object",
55
+ properties: {
56
+ email: { type: "string", description: "Person's email address" },
57
+ phone: { type: "string", description: "Person's phone number" },
58
+ social_media_url: { type: "string", description: "Social profile URL" },
59
+ },
60
+ },
61
+ };
62
+ export const personInteractionsTool = {
63
+ name: "oneshot_person_interactions",
64
+ description: "See who someone follows, who follows them, and who they reply to. Costs ~$0.10.",
65
+ inputSchema: {
66
+ type: "object",
67
+ properties: {
68
+ social_media_url: { type: "string", description: "Social profile or post URL (Twitter/X or Instagram)" },
69
+ type: { type: "string", enum: ["replies", "followers", "following", "followers,following"], description: "Interaction type (default: followers,following)" },
70
+ max_results: { type: "number", description: "Max results 1-1000 (default: 100)" },
71
+ },
72
+ required: ["social_media_url"],
73
+ },
74
+ };
75
+ // Handlers
76
+ export async function handleDeepResearchPerson(agent, args) {
77
+ return agent.deepResearchPerson({
78
+ email: args.email,
79
+ social_media_url: args.social_media_url,
80
+ name: args.name,
81
+ company: args.company,
82
+ });
83
+ }
84
+ export async function handleSocialProfiles(agent, args) {
85
+ return agent.socialProfiles({
86
+ email: args.email,
87
+ social_media_url: args.social_media_url,
88
+ });
89
+ }
90
+ export async function handleArticleSearch(agent, args) {
91
+ return agent.articleSearch({
92
+ name: args.name,
93
+ company: args.company,
94
+ sort: args.sort,
95
+ limit: args.limit,
96
+ });
97
+ }
98
+ export async function handlePersonNewsfeed(agent, args) {
99
+ return agent.personNewsfeed({
100
+ social_media_url: args.social_media_url,
101
+ });
102
+ }
103
+ export async function handlePersonInterests(agent, args) {
104
+ return agent.personInterests({
105
+ email: args.email,
106
+ phone: args.phone,
107
+ social_media_url: args.social_media_url,
108
+ });
109
+ }
110
+ export async function handlePersonInteractions(agent, args) {
111
+ return agent.personInteractions({
112
+ social_media_url: args.social_media_url,
113
+ type: args.type,
114
+ max_results: args.max_results,
115
+ });
116
+ }
@@ -0,0 +1,4 @@
1
+ import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ import { OneShot } from "@oneshot-agent/sdk";
3
+ export declare const webSearchTool: Tool;
4
+ export declare function handleWebSearch(agent: OneShot, args: Record<string, unknown>): Promise<import("@oneshot-agent/sdk").WebSearchResult>;
@@ -0,0 +1,24 @@
1
+ export const webSearchTool = {
2
+ name: "oneshot_web_search",
3
+ description: "Search the web and get URLs, titles, and descriptions. Fast and synchronous. Costs $0.01 per search.",
4
+ inputSchema: {
5
+ type: "object",
6
+ properties: {
7
+ query: {
8
+ type: "string",
9
+ description: "Search query string",
10
+ },
11
+ max_results: {
12
+ type: "number",
13
+ description: "Maximum number of results to return (1-20, default: 5)",
14
+ },
15
+ },
16
+ required: ["query"],
17
+ },
18
+ };
19
+ export async function handleWebSearch(agent, args) {
20
+ return agent.webSearch({
21
+ query: args.query,
22
+ max_results: args.max_results,
23
+ });
24
+ }
@@ -0,0 +1,4 @@
1
+ import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ import { OneShot } from "@oneshot-agent/sdk";
3
+ export declare const webReadTool: Tool;
4
+ export declare function handleWebRead(agent: OneShot, args: Record<string, unknown>): Promise<import("@oneshot-agent/sdk").WebReadResult>;
@@ -0,0 +1,19 @@
1
+ export const webReadTool = {
2
+ name: "oneshot_web_read",
3
+ description: "Read a web page and extract its content as markdown with a screenshot. Costs ~$0.02 per page.",
4
+ inputSchema: {
5
+ type: "object",
6
+ properties: {
7
+ url: {
8
+ type: "string",
9
+ description: "URL of the web page to read",
10
+ },
11
+ },
12
+ required: ["url"],
13
+ },
14
+ };
15
+ export async function handleWebRead(agent, args) {
16
+ return agent.webRead({
17
+ url: args.url,
18
+ });
19
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oneshot-agent/mcp-server",
3
- "version": "0.3.2",
3
+ "version": "0.4.1",
4
4
  "description": "MCP server for OneShot - commercial actions for AI agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -23,13 +23,14 @@
23
23
  "author": "OneShot",
24
24
  "license": "MIT",
25
25
  "dependencies": {
26
- "@modelcontextprotocol/sdk": "^1.0.0",
27
- "@oneshot-agent/sdk": "^0.6.1",
28
- "zod": "^3.23.0"
26
+ "@coinbase/cdp-sdk": "1.45.0",
27
+ "@modelcontextprotocol/sdk": "1.27.1",
28
+ "@oneshot-agent/sdk": "workspace:*",
29
+ "zod": "3.25.76"
29
30
  },
30
31
  "devDependencies": {
31
- "@types/node": "^20.0.0",
32
- "typescript": "^5.0.0"
32
+ "@types/node": "25.3.5",
33
+ "typescript": "5.9.3"
33
34
  },
34
35
  "engines": {
35
36
  "node": ">=18"