@oneshot-agent/mcp-server 0.23.1 → 0.24.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
@@ -96,7 +96,7 @@ Read tools (inbox, SMS inbox, notifications, balance, browser profiles) return p
96
96
  ## Remote (hosted)
97
97
 
98
98
  Clients that run in someone else's cloud — Grok Bot, hosted runners — cannot spawn this
99
- server and must not hold a wallet key. For them OneShot hosts the same 61 tools over
99
+ server and must not hold a wallet key. For them OneShot hosts the same 63 tools over
100
100
  Streamable HTTP at **`https://win.oneshotagent.com/mcp`**, authenticated with an
101
101
  **agent access token** and billed to the agent's credit balance:
102
102
 
package/dist/index.js CHANGED
@@ -52,7 +52,7 @@ async function main() {
52
52
  // Create MCP server
53
53
  const server = new Server({
54
54
  name: "oneshot-mcp",
55
- version: "0.23.1", // keep in sync with package.json; guarded by version.test.ts
55
+ version: "0.24.0", // keep in sync with package.json; guarded by version.test.ts
56
56
  }, {
57
57
  capabilities: {
58
58
  tools: {},
@@ -17,7 +17,7 @@ import { deepResearchPersonTool, socialProfilesTool, articleSearchTool, personNe
17
17
  import { companySearchTool, enrichCompanyTool, handleCompanySearch, handleEnrichCompany } from "./company.js";
18
18
  import { localSearchTool, localResolveTool, handleLocalSearch, handleLocalResolve } from "./local.js";
19
19
  import { govSolicitationsTool, handleGovSolicitations } from "./gov.js";
20
- import { linkedinConnectTool, linkedinAccountsTool, linkedinSyncTool, linkedinConversationsTool, linkedinMessagesTool, linkedinReplyTool, linkedinViewProfileTool, linkedinReactTool, handleLinkedinConnect, handleLinkedinAccounts, handleLinkedinSync, handleLinkedinConversations, handleLinkedinMessages, handleLinkedinReply, handleLinkedinViewProfile, handleLinkedinReact, } from "./linkedin.js";
20
+ import { linkedinConnectTool, linkedinAccountsTool, linkedinSyncTool, linkedinConversationsTool, linkedinMessagesTool, linkedinReplyTool, linkedinViewProfileTool, linkedinReactTool, linkedinInviteTool, linkedinWithdrawInvitationTool, handleLinkedinConnect, handleLinkedinAccounts, handleLinkedinSync, handleLinkedinConversations, handleLinkedinMessages, handleLinkedinReply, handleLinkedinViewProfile, handleLinkedinReact, handleLinkedinInvite, handleLinkedinWithdrawInvitation, } from "./linkedin.js";
21
21
  import { computeTool, computeStatusTool, computeTasksTool, computeCancelTool, computeRespondTool, computePauseTool, computeResumeTool, computeFundTool, handleCompute, handleComputeStatus, handleComputeTasks, handleComputeCancel, handleComputeRespond, handleComputePause, handleComputeResume, handleComputeFund } from "./compute.js";
22
22
  import { listDomainsTool, pauseDomainTool, resumeDomainTool, handleListDomains, handlePauseDomain, handleResumeDomain } from "./domains.js";
23
23
  import { spendBreakdownTool, rocsTool, rocsByGoalTool, receiptsListTool, tagReceiptValueTool, handleSpendBreakdown, handleRocs, handleRocsByGoal, handleReceiptsList, handleTagReceiptValue } from "./analytics.js";
@@ -79,6 +79,7 @@ export const tools = [
79
79
  linkedinConversationsTool,
80
80
  linkedinMessagesTool,
81
81
  linkedinReplyTool,
82
+ linkedinInviteTool, linkedinWithdrawInvitationTool,
82
83
  linkedinViewProfileTool,
83
84
  linkedinReactTool,
84
85
  // Domains
@@ -155,6 +156,8 @@ const handlers = {
155
156
  "oneshot_linkedin_conversations": handleLinkedinConversations,
156
157
  "oneshot_linkedin_messages": handleLinkedinMessages,
157
158
  "oneshot_linkedin_reply": handleLinkedinReply,
159
+ "oneshot_linkedin_invite": handleLinkedinInvite,
160
+ "oneshot_linkedin_withdraw_invitation": handleLinkedinWithdrawInvitation,
158
161
  "oneshot_linkedin_view_profile": handleLinkedinViewProfile,
159
162
  "oneshot_linkedin_react": handleLinkedinReact,
160
163
  // Domains
@@ -9,8 +9,16 @@ export declare const linkedinReplyTool: Tool;
9
9
  export declare const linkedinViewProfileTool: Tool;
10
10
  export declare const linkedinReactTool: Tool;
11
11
  export declare function handleLinkedinConnect(agent: OneShot, args: Record<string, unknown>): Promise<import("@oneshot-agent/sdk").LinkedInConnectIntentIssued>;
12
- export declare function handleLinkedinAccounts(agent: OneShot, args: Record<string, unknown>): Promise<import("@oneshot-agent/sdk").LinkedInConnectIntent | import("@oneshot-agent/sdk").LinkedInSyncStatus | {
12
+ export declare function handleLinkedinAccounts(agent: OneShot, args: Record<string, unknown>): Promise<import("@oneshot-agent/sdk").LinkedInConnectIntent | {
13
13
  accounts: import("@oneshot-agent/sdk").LinkedInAccount[];
14
+ } | {
15
+ account: import("@oneshot-agent/sdk").LinkedInAccount;
16
+ account_id: string;
17
+ sync_state: import("@oneshot-agent/sdk").LinkedInSyncState;
18
+ coverage: import("@oneshot-agent/sdk").LinkedInCoverage;
19
+ active_run: import("@oneshot-agent/sdk").LinkedInSyncRun | null;
20
+ last_run: import("@oneshot-agent/sdk").LinkedInSyncRun | null;
21
+ runs: import("@oneshot-agent/sdk").LinkedInSyncRun[];
14
22
  }>;
15
23
  export declare function handleLinkedinSync(agent: OneShot, args: Record<string, unknown>): Promise<import("@oneshot-agent/sdk").LinkedInSyncRunResult>;
16
24
  export declare function handleLinkedinConversations(agent: OneShot, args: Record<string, unknown>): Promise<import("@oneshot-agent/sdk").LinkedInConversationsPage>;
@@ -18,3 +26,7 @@ export declare function handleLinkedinMessages(agent: OneShot, args: Record<stri
18
26
  export declare function handleLinkedinReply(agent: OneShot, args: Record<string, unknown>): Promise<import("@oneshot-agent/sdk").LinkedInWriteResult>;
19
27
  export declare function handleLinkedinViewProfile(agent: OneShot, args: Record<string, unknown>): Promise<import("@oneshot-agent/sdk").LinkedInProfileViewResult>;
20
28
  export declare function handleLinkedinReact(agent: OneShot, args: Record<string, unknown>): Promise<import("@oneshot-agent/sdk").LinkedInWriteResult>;
29
+ export declare const linkedinInviteTool: Tool;
30
+ export declare function handleLinkedinInvite(agent: OneShot, args: Record<string, unknown>): Promise<import("@oneshot-agent/sdk").LinkedInInviteResult>;
31
+ export declare const linkedinWithdrawInvitationTool: Tool;
32
+ export declare function handleLinkedinWithdrawInvitation(agent: OneShot, args: Record<string, unknown>): Promise<import("@oneshot-agent/sdk").LinkedInWithdrawInvitationResult>;
@@ -2,14 +2,14 @@
2
2
  * LinkedIn messaging through a human-connected account (issue #756).
3
3
  *
4
4
  * The human connects their own LinkedIn account via a hosted login link and
5
- * grants specific actions (read, reply, view_profile, react). Reconnect and
5
+ * grants specific actions (read, reply, view_profile, react, invite). Reconnect and
6
6
  * revoke are deliberately NOT exposed as MCP tools — a human decides those
7
7
  * from the application that owns the account.
8
8
  */
9
9
  const GRANT_ACTIONS = ["read", "reply", "view_profile", "react", "invite", "comment"];
10
10
  export const linkedinConnectTool = {
11
11
  name: "oneshot_linkedin_connect",
12
- description: "Create a hosted LinkedIn login link for a human to connect THEIR OWN LinkedIn account to this agent, granting specific actions (read, reply, view_profile, react). Returns intent_id + url (show the url to the human; it expires in 30 minutes; never embed it in an iframe). Poll oneshot_linkedin_accounts with the intent_id afterwards. Free tool. If no active account exists, or status is deleted_upstream/revoked, ask the human to connect again with oneshot_linkedin_connect and choose grants anew. reconnect_required applies only to an existing connection; reconnect is managed by the owning application.",
12
+ description: "Create a hosted LinkedIn login link for a human to connect THEIR OWN LinkedIn account to this agent, granting specific actions (read, reply, view_profile, react, invite). Returns intent_id + url (show the url to the human; it expires in 30 minutes; never embed it in an iframe). Poll oneshot_linkedin_accounts with the intent_id afterwards. Free tool. If no active account exists, or status is deleted_upstream/revoked, ask the human to connect again with oneshot_linkedin_connect and choose grants anew. reconnect_required applies only to an existing connection; reconnect is managed by the owning application.",
13
13
  inputSchema: {
14
14
  type: "object",
15
15
  properties: {
@@ -27,7 +27,7 @@ export const linkedinAccountsTool = {
27
27
  type: "object",
28
28
  properties: {
29
29
  intent_id: { type: "string", description: "Connection intent to check instead of listing accounts" },
30
- account_id: { type: "string", description: "Return one account (with coverage + recent sync runs) instead of the list" },
30
+ account_id: { type: "string", description: "Return one account (with invitation limits, coverage + recent sync runs) instead of the list" },
31
31
  include_revoked: { type: "boolean", description: "Include revoked accounts in the list (default false)" },
32
32
  },
33
33
  },
@@ -135,8 +135,10 @@ export async function handleLinkedinConnect(agent, args) {
135
135
  export async function handleLinkedinAccounts(agent, args) {
136
136
  if (typeof args.intent_id === "string" && args.intent_id)
137
137
  return agent.getLinkedInConnection(args.intent_id);
138
- if (typeof args.account_id === "string" && args.account_id)
139
- return agent.getLinkedInSync(args.account_id);
138
+ if (typeof args.account_id === "string" && args.account_id) {
139
+ const [sync, account] = await Promise.all([agent.getLinkedInSync(args.account_id), agent.getLinkedInAccount(args.account_id)]);
140
+ return { ...sync, account };
141
+ }
140
142
  return agent.listLinkedInAccounts({ includeRevoked: args.include_revoked });
141
143
  }
142
144
  export async function handleLinkedinSync(agent, args) {
@@ -196,3 +198,22 @@ export async function handleLinkedinReact(agent, args) {
196
198
  idempotencyKey: args.idempotency_key,
197
199
  });
198
200
  }
201
+ export const linkedinInviteTool = {
202
+ name: "oneshot_linkedin_invite", description: "Send a LinkedIn invitation (25 per account per day by default). Requires the invite grant.",
203
+ inputSchema: { type: "object", properties: { account_id: { type: "string" }, profile: { type: "string" }, note: { type: "string", description: "Optional invitation message, at most 300 characters" },
204
+ memo: { type: "string" }, idempotency_key: { type: "string", description: "Reuse to retry the same action" } }, required: ["account_id", "profile"] },
205
+ };
206
+ export async function handleLinkedinInvite(agent, args) {
207
+ return agent.linkedinInvite({ accountId: args.account_id, profile: args.profile,
208
+ note: args.note,
209
+ memo: args.memo, idempotencyKey: args.idempotency_key });
210
+ }
211
+ export const linkedinWithdrawInvitationTool = {
212
+ name: "oneshot_linkedin_withdraw_invitation", description: "Withdraw a pending invitation tracked by OneShot; does not disconnect existing connections. Requires the invite grant.",
213
+ inputSchema: { type: "object", properties: { account_id: { type: "string" }, invitation_id: { type: "string" },
214
+ memo: { type: "string" }, idempotency_key: { type: "string", description: "Reuse to retry the same action" } }, required: ["account_id", "invitation_id"] },
215
+ };
216
+ export async function handleLinkedinWithdrawInvitation(agent, args) {
217
+ return agent.linkedinWithdrawInvitation({ accountId: args.account_id, invitationId: args.invitation_id,
218
+ memo: args.memo, idempotencyKey: args.idempotency_key });
219
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@oneshot-agent/mcp-server",
3
- "version": "0.23.1",
4
- "description": "MCP server for OneShot - 61 tools for AI agents",
3
+ "version": "0.24.0",
4
+ "description": "MCP server for OneShot - 63 tools for AI agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -25,7 +25,7 @@
25
25
  "dependencies": {
26
26
  "@coinbase/cdp-sdk": "1.45.0",
27
27
  "@modelcontextprotocol/sdk": "1.27.1",
28
- "@oneshot-agent/sdk": "^0.37.0",
28
+ "@oneshot-agent/sdk": "^0.38.0",
29
29
  "zod": "3.25.76"
30
30
  },
31
31
  "devDependencies": {