@oneshot-agent/mcp-server 0.1.0 → 0.2.0

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
@@ -33,21 +33,27 @@ Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
33
33
  }
34
34
  ```
35
35
 
36
- ### OpenClaw
36
+ ### Cursor
37
37
 
38
- Add to your OpenClaw configuration:
38
+ Add to `.cursor/mcp.json` in your project:
39
39
 
40
- ```yaml
41
- mcp_servers:
42
- - name: oneshot
43
- command: npx -y @oneshot-agent/mcp-server
44
- env:
45
- ONESHOT_WALLET_PRIVATE_KEY: "0xYourPrivateKey"
40
+ ```json
41
+ {
42
+ "mcpServers": {
43
+ "oneshot": {
44
+ "command": "npx",
45
+ "args": ["-y", "@oneshot-agent/mcp-server"],
46
+ "env": {
47
+ "ONESHOT_WALLET_PRIVATE_KEY": "0xYourPrivateKey"
48
+ }
49
+ }
50
+ }
51
+ }
46
52
  ```
47
53
 
48
- ### Cursor
54
+ ### Claude Code
49
55
 
50
- Add to `.cursor/mcp.json` in your project:
56
+ Add to `~/.claude/settings.json`:
51
57
 
52
58
  ```json
53
59
  {
@@ -65,26 +71,54 @@ Add to `.cursor/mcp.json` in your project:
65
71
 
66
72
  ## Available Tools
67
73
 
74
+ ### Communication
75
+
68
76
  | Tool | Description | Cost |
69
77
  |------|-------------|------|
70
78
  | `oneshot_email` | Send emails with attachments | ~$0.01 |
71
79
  | `oneshot_voice` | AI-powered phone calls | ~$0.25/min |
72
80
  | `oneshot_sms` | Send SMS messages | ~$0.035/segment |
73
- | `oneshot_research` | Deep web research | $0.50-$2.00 |
74
- | `oneshot_commerce_search` | Search products | Free |
75
- | `oneshot_commerce_buy` | Purchase products | Product price + fee |
76
- | `oneshot_enrich_profile` | Enrich person profiles | ~$0.10 |
77
- | `oneshot_find_email` | Find email addresses | ~$0.10 |
81
+
82
+ ### Inbox
83
+
84
+ | Tool | Description | Cost |
85
+ |------|-------------|------|
86
+ | `oneshot_inbox_list` | List received emails | Free |
87
+ | `oneshot_inbox_get` | Get a specific email | Free |
88
+ | `oneshot_sms_inbox_list` | List received SMS messages | Free |
89
+ | `oneshot_sms_inbox_get` | Get a specific SMS message | Free |
90
+
91
+ ### Research & Enrichment
92
+
93
+ | Tool | Description | Cost |
94
+ |------|-------------|------|
95
+ | `oneshot_research` | Deep web research with sources | $0.50-$2.00 |
96
+ | `oneshot_people_search` | Search for people by title, company, etc. | ~$0.10/result |
97
+ | `oneshot_enrich_profile` | Enrich person profile from LinkedIn/email | ~$0.10 |
98
+ | `oneshot_find_email` | Find someone's email address | ~$0.10 |
78
99
  | `oneshot_verify_email` | Verify email deliverability | ~$0.01 |
100
+
101
+ ### Commerce
102
+
103
+ | Tool | Description | Cost |
104
+ |------|-------------|------|
105
+ | `oneshot_commerce_search` | Search for products | Free |
106
+ | `oneshot_commerce_buy` | Purchase products | Product price + fee |
107
+
108
+ ### Account
109
+
110
+ | Tool | Description | Cost |
111
+ |------|-------------|------|
79
112
  | `oneshot_notifications` | List agent notifications | Free |
80
- | `oneshot_mark_notification_read` | Mark notification read | Free |
113
+ | `oneshot_mark_notification_read` | Mark notification as read | Free |
114
+ | `oneshot_get_balance` | Get USDC wallet balance | Free |
81
115
 
82
116
  ## Tool Examples
83
117
 
84
118
  ### Send an Email
85
119
 
86
120
  ```
87
- Use the oneshot_email tool to send an email:
121
+ Use oneshot_email:
88
122
  - to: "user@example.com"
89
123
  - subject: "Hello from AI"
90
124
  - body: "<h1>Hello!</h1><p>This email was sent by an AI agent.</p>"
@@ -93,7 +127,7 @@ Use the oneshot_email tool to send an email:
93
127
  ### Make a Phone Call
94
128
 
95
129
  ```
96
- Use the oneshot_voice tool to make a call:
130
+ Use oneshot_voice:
97
131
  - target_number: "+14155551234"
98
132
  - objective: "Call the restaurant and make a reservation for 2 people at 7pm tonight"
99
133
  - caller_persona: "A polite assistant calling on behalf of John"
@@ -102,7 +136,7 @@ Use the oneshot_voice tool to make a call:
102
136
  ### Send an SMS
103
137
 
104
138
  ```
105
- Use the oneshot_sms tool:
139
+ Use oneshot_sms:
106
140
  - to_number: "+14155551234"
107
141
  - message: "Your order has shipped! Track it at: https://example.com/track/123"
108
142
  ```
@@ -110,20 +144,44 @@ Use the oneshot_sms tool:
110
144
  ### Research a Topic
111
145
 
112
146
  ```
113
- Use the oneshot_research tool:
114
- - topic: "What are the latest developments in quantum computing in 2024?"
147
+ Use oneshot_research:
148
+ - topic: "What are the latest developments in quantum computing?"
115
149
  - depth: "deep"
116
150
  ```
117
151
 
152
+ ### Search for People
153
+
154
+ ```
155
+ Use oneshot_people_search:
156
+ - job_titles: ["CTO", "VP Engineering"]
157
+ - companies: ["Stripe", "Square"]
158
+ - location: ["San Francisco"]
159
+ - limit: 10
160
+ ```
161
+
118
162
  ### Find Someone's Email
119
163
 
120
164
  ```
121
- Use the oneshot_find_email tool:
165
+ Use oneshot_find_email:
122
166
  - first_name: "John"
123
167
  - last_name: "Smith"
124
168
  - company_domain: "example.com"
125
169
  ```
126
170
 
171
+ ### Check Wallet Balance
172
+
173
+ ```
174
+ Use oneshot_get_balance (no parameters needed)
175
+ ```
176
+
177
+ ### Read Inbox
178
+
179
+ ```
180
+ Use oneshot_inbox_list:
181
+ - limit: 10
182
+ - include_body: true
183
+ ```
184
+
127
185
  ## Funding Your Agent
128
186
 
129
187
  Fund your agent wallet at [oneshotagent.com](https://oneshotagent.com) with USDC on Base network.
@@ -0,0 +1,6 @@
1
+ import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ import { OneShot } from "@oneshot-agent/sdk";
3
+ export declare const inboxListTool: Tool;
4
+ export declare const inboxGetTool: Tool;
5
+ export declare function handleInboxList(agent: OneShot, args: Record<string, unknown>): Promise<import("@oneshot-agent/sdk").InboxListResult>;
6
+ export declare function handleInboxGet(agent: OneShot, args: Record<string, unknown>): Promise<import("@oneshot-agent/sdk").InboxEmail>;
@@ -0,0 +1,45 @@
1
+ export const inboxListTool = {
2
+ name: "oneshot_inbox_list",
3
+ description: "List emails in the agent's inbox. Free. Shows received emails with sender, subject, and timestamp.",
4
+ inputSchema: {
5
+ type: "object",
6
+ properties: {
7
+ since: {
8
+ type: "string",
9
+ description: "ISO timestamp to filter emails received after this time",
10
+ },
11
+ limit: {
12
+ type: "number",
13
+ description: "Maximum number of emails to return (default: 50)",
14
+ },
15
+ include_body: {
16
+ type: "boolean",
17
+ description: "Include email body in results (default: false)",
18
+ },
19
+ },
20
+ },
21
+ };
22
+ export const inboxGetTool = {
23
+ name: "oneshot_inbox_get",
24
+ description: "Get a specific email by ID. Free. Returns full email including body and attachments.",
25
+ inputSchema: {
26
+ type: "object",
27
+ properties: {
28
+ email_id: {
29
+ type: "string",
30
+ description: "Email ID to retrieve",
31
+ },
32
+ },
33
+ required: ["email_id"],
34
+ },
35
+ };
36
+ export async function handleInboxList(agent, args) {
37
+ return agent.inboxList({
38
+ since: args.since,
39
+ limit: args.limit,
40
+ include_body: args.include_body,
41
+ });
42
+ }
43
+ export async function handleInboxGet(agent, args) {
44
+ return agent.inboxGet(args.email_id);
45
+ }
@@ -2,36 +2,62 @@ import { emailTool, handleEmail } from "./email.js";
2
2
  import { voiceTool, handleVoice } from "./voice.js";
3
3
  import { smsTool, handleSms } from "./sms.js";
4
4
  import { researchTool, handleResearch } from "./research.js";
5
+ import { peopleSearchTool, handlePeopleSearch } from "./people.js";
5
6
  import { commerceSearchTool, commerceBuyTool, handleCommerceSearch, handleCommerceBuy } from "./commerce.js";
6
7
  import { enrichProfileTool, findEmailTool, verifyEmailTool, handleEnrichProfile, handleFindEmail, handleVerifyEmail } from "./enrichment.js";
8
+ import { inboxListTool, inboxGetTool, handleInboxList, handleInboxGet } from "./inbox.js";
9
+ import { smsInboxListTool, smsInboxGetTool, handleSmsInboxList, handleSmsInboxGet } from "./sms-inbox.js";
7
10
  import { notificationsTool, markReadTool, handleNotifications, handleMarkRead } from "./notifications.js";
11
+ import { getBalanceTool, handleGetBalance } from "./wallet.js";
8
12
  // All available tools
9
13
  export const tools = [
14
+ // Communication
10
15
  emailTool,
11
16
  voiceTool,
12
17
  smsTool,
18
+ // Inbox
19
+ inboxListTool,
20
+ inboxGetTool,
21
+ smsInboxListTool,
22
+ smsInboxGetTool,
23
+ // Research & Enrichment
13
24
  researchTool,
14
- commerceSearchTool,
15
- commerceBuyTool,
25
+ peopleSearchTool,
16
26
  enrichProfileTool,
17
27
  findEmailTool,
18
28
  verifyEmailTool,
29
+ // Commerce
30
+ commerceSearchTool,
31
+ commerceBuyTool,
32
+ // Account
19
33
  notificationsTool,
20
34
  markReadTool,
35
+ getBalanceTool,
21
36
  ];
22
37
  // Tool handlers map
23
38
  const handlers = {
39
+ // Communication
24
40
  "oneshot_email": handleEmail,
25
41
  "oneshot_voice": handleVoice,
26
42
  "oneshot_sms": handleSms,
43
+ // Inbox
44
+ "oneshot_inbox_list": handleInboxList,
45
+ "oneshot_inbox_get": handleInboxGet,
46
+ "oneshot_sms_inbox_list": handleSmsInboxList,
47
+ "oneshot_sms_inbox_get": handleSmsInboxGet,
48
+ // Research & Enrichment
27
49
  "oneshot_research": handleResearch,
28
- "oneshot_commerce_search": handleCommerceSearch,
29
- "oneshot_commerce_buy": handleCommerceBuy,
50
+ "oneshot_people_search": handlePeopleSearch,
30
51
  "oneshot_enrich_profile": handleEnrichProfile,
31
52
  "oneshot_find_email": handleFindEmail,
32
53
  "oneshot_verify_email": handleVerifyEmail,
54
+ // Commerce
55
+ "oneshot_commerce_search": handleCommerceSearch,
56
+ "oneshot_commerce_buy": handleCommerceBuy,
57
+ // Account
33
58
  "oneshot_notifications": handleNotifications,
34
59
  "oneshot_mark_notification_read": handleMarkRead,
60
+ "oneshot_get_balance": handleGetBalance,
35
61
  };
36
62
  export async function handleToolCall(agent, toolName, args) {
37
63
  const handler = handlers[toolName];
@@ -0,0 +1,4 @@
1
+ import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ import { OneShot } from "@oneshot-agent/sdk";
3
+ export declare const peopleSearchTool: Tool;
4
+ export declare function handlePeopleSearch(agent: OneShot, args: Record<string, unknown>): Promise<import("@oneshot-agent/sdk").PeopleSearchResult>;
@@ -0,0 +1,65 @@
1
+ export const peopleSearchTool = {
2
+ name: "oneshot_people_search",
3
+ description: "Search for people by job title, company, location, skills, etc. Returns professional profiles. Costs ~$0.10 per result.",
4
+ inputSchema: {
5
+ type: "object",
6
+ properties: {
7
+ job_titles: {
8
+ type: "array",
9
+ items: { type: "string" },
10
+ description: "Job titles to search for (e.g., ['CEO', 'CTO'])",
11
+ },
12
+ keywords: {
13
+ type: "array",
14
+ items: { type: "string" },
15
+ description: "Keywords to match in profiles",
16
+ },
17
+ companies: {
18
+ type: "array",
19
+ items: { type: "string" },
20
+ description: "Company names to filter by",
21
+ },
22
+ location: {
23
+ type: "array",
24
+ items: { type: "string" },
25
+ description: "Locations to filter by (e.g., ['San Francisco', 'New York'])",
26
+ },
27
+ skills: {
28
+ type: "array",
29
+ items: { type: "string" },
30
+ description: "Skills to match",
31
+ },
32
+ seniority: {
33
+ type: "array",
34
+ items: { type: "string" },
35
+ description: "Seniority levels (e.g., ['senior', 'executive'])",
36
+ },
37
+ industry: {
38
+ type: "array",
39
+ items: { type: "string" },
40
+ description: "Industries to filter by",
41
+ },
42
+ company_size: {
43
+ type: "string",
44
+ description: "Company size filter (e.g., '1-10', '11-50', '51-200', '201-500', '501-1000', '1001+')",
45
+ },
46
+ limit: {
47
+ type: "number",
48
+ description: "Maximum number of results (default: 100)",
49
+ },
50
+ },
51
+ },
52
+ };
53
+ export async function handlePeopleSearch(agent, args) {
54
+ return agent.peopleSearch({
55
+ job_titles: args.job_titles,
56
+ keywords: args.keywords,
57
+ companies: args.companies,
58
+ location: args.location,
59
+ skills: args.skills,
60
+ seniority: args.seniority,
61
+ industry: args.industry,
62
+ company_size: args.company_size,
63
+ limit: args.limit,
64
+ });
65
+ }
@@ -0,0 +1,6 @@
1
+ import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ import { OneShot } from "@oneshot-agent/sdk";
3
+ export declare const smsInboxListTool: Tool;
4
+ export declare const smsInboxGetTool: Tool;
5
+ export declare function handleSmsInboxList(agent: OneShot, args: Record<string, unknown>): Promise<import("@oneshot-agent/sdk").SmsInboxResult>;
6
+ export declare function handleSmsInboxGet(agent: OneShot, args: Record<string, unknown>): Promise<import("@oneshot-agent/sdk").SmsInboxMessage>;
@@ -0,0 +1,45 @@
1
+ export const smsInboxListTool = {
2
+ name: "oneshot_sms_inbox_list",
3
+ description: "List inbound SMS messages. Free. Shows received text messages with sender and content.",
4
+ inputSchema: {
5
+ type: "object",
6
+ properties: {
7
+ since: {
8
+ type: "string",
9
+ description: "ISO timestamp to filter messages received after this time",
10
+ },
11
+ limit: {
12
+ type: "number",
13
+ description: "Maximum number of messages to return (default: 50, max: 100)",
14
+ },
15
+ from: {
16
+ type: "string",
17
+ description: "Filter by sender phone number",
18
+ },
19
+ },
20
+ },
21
+ };
22
+ export const smsInboxGetTool = {
23
+ name: "oneshot_sms_inbox_get",
24
+ description: "Get a specific SMS message by ID. Free. Returns full message details.",
25
+ inputSchema: {
26
+ type: "object",
27
+ properties: {
28
+ message_id: {
29
+ type: "string",
30
+ description: "SMS message ID to retrieve",
31
+ },
32
+ },
33
+ required: ["message_id"],
34
+ },
35
+ };
36
+ export async function handleSmsInboxList(agent, args) {
37
+ return agent.smsInboxList({
38
+ since: args.since,
39
+ limit: args.limit,
40
+ from: args.from,
41
+ });
42
+ }
43
+ export async function handleSmsInboxGet(agent, args) {
44
+ return agent.smsInboxGet(args.message_id);
45
+ }
@@ -0,0 +1,9 @@
1
+ import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ import { OneShot } from "@oneshot-agent/sdk";
3
+ export declare const getBalanceTool: Tool;
4
+ export declare function handleGetBalance(agent: OneShot, _args: Record<string, unknown>): Promise<{
5
+ balance: string;
6
+ currency: string;
7
+ address: string;
8
+ testMode: boolean;
9
+ }>;
@@ -0,0 +1,17 @@
1
+ export const getBalanceTool = {
2
+ name: "oneshot_get_balance",
3
+ description: "Get the agent's USDC balance. Free. Returns balance in human-readable format.",
4
+ inputSchema: {
5
+ type: "object",
6
+ properties: {},
7
+ },
8
+ };
9
+ export async function handleGetBalance(agent, _args) {
10
+ const balance = await agent.getBalance(agent.usdcAddress);
11
+ return {
12
+ balance,
13
+ currency: "USDC",
14
+ address: agent.address,
15
+ testMode: agent.isTestMode,
16
+ };
17
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oneshot-agent/mcp-server",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "MCP server for OneShot - commercial actions for AI agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -13,7 +13,13 @@
13
13
  "dev": "tsc --watch",
14
14
  "prepublishOnly": "npm run build"
15
15
  },
16
- "keywords": ["mcp", "oneshot", "ai-agent", "claude", "tools"],
16
+ "keywords": [
17
+ "mcp",
18
+ "oneshot",
19
+ "ai-agent",
20
+ "claude",
21
+ "tools"
22
+ ],
17
23
  "author": "OneShot",
18
24
  "license": "MIT",
19
25
  "dependencies": {
@@ -28,5 +34,9 @@
28
34
  "engines": {
29
35
  "node": ">=18"
30
36
  },
31
- "files": ["dist", "bin", "README.md"]
37
+ "files": [
38
+ "dist",
39
+ "bin",
40
+ "README.md"
41
+ ]
32
42
  }