@oneshot-agent/mcp-server 0.17.2 → 0.19.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
@@ -122,6 +122,9 @@ Read tools (inbox, SMS inbox, notifications, balance, browser profiles) return p
122
122
  | `oneshot_verify_email` | Verify email deliverability |
123
123
  | `oneshot_company_search` | Search for companies by industry, size, location, etc. |
124
124
  | `oneshot_enrich_company` | Enrich a company from domain, name, LinkedIn, or ticker |
125
+ | `oneshot_local_search` | Discover local businesses (restaurants, contractors, practices) by category × location |
126
+ | `oneshot_local_resolve` | Business name + address → website domain, phone, status, confidence |
127
+ | `oneshot_gov_solicitations` | Federal Sources Sought / Presolicitation notices by NAICS with the contracting officer's contact |
125
128
 
126
129
  ### Person Intelligence
127
130
 
package/dist/index.js CHANGED
@@ -38,7 +38,7 @@ async function main() {
38
38
  // Create MCP server
39
39
  const server = new Server({
40
40
  name: "oneshot-mcp",
41
- version: "0.17.2", // keep in sync with package.json; guarded by version.test.ts
41
+ version: "0.19.0", // keep in sync with package.json; guarded by version.test.ts
42
42
  }, {
43
43
  capabilities: {
44
44
  tools: {},
@@ -0,0 +1,4 @@
1
+ import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ import { OneShot } from "@oneshot-agent/sdk";
3
+ export declare const govSolicitationsTool: Tool;
4
+ export declare function handleGovSolicitations(agent: OneShot, args: Record<string, unknown>): Promise<import("@oneshot-agent/sdk").GovSolicitationsResult>;
@@ -0,0 +1,36 @@
1
+ export const govSolicitationsTool = {
2
+ name: "oneshot_gov_solicitations",
3
+ description: "Federal contract opportunities (SAM.gov) by NAICS code — Sources Sought and Presolicitation notices with the contracting officer's published name and email, agency, response deadline, set-aside, and description. Use for government buyers instead of people_search. Flat price per search. Paid tool.",
4
+ inputSchema: {
5
+ type: "object",
6
+ properties: {
7
+ naics: { type: "array", items: { type: "string" }, description: "6-digit NAICS codes, 1-20 (required)" },
8
+ notice_types: { type: "array", items: { type: "string", enum: ["r", "p", "o", "k", "s", "a", "u", "i", "g"] }, description: "r=Sources Sought, p=Presolicitation, o=Solicitation, k=Combined Synopsis, s=Special Notice, a=Award. Default ['r','p']" },
9
+ since_days: { type: "number", description: "Look-back window on posted date, 1-365 (default 30)" },
10
+ agencies: { type: "array", items: { type: "string" }, description: "Agency-name substrings to keep" },
11
+ keywords: { type: "array", items: { type: "string" }, description: "Title / full-text keywords" },
12
+ state: { type: "string", description: "Place-of-performance state code, e.g. 'TX'" },
13
+ set_aside: { type: "string", description: "Set-aside code: SBA, 8A, HZC, SDVOSBC, WOSB, ..." },
14
+ active_only: { type: "boolean", description: "Default true: drop archived notices and past deadlines" },
15
+ has_contact: { type: "boolean", description: "Only notices with a name + email point of contact" },
16
+ include_description: { type: "boolean", description: "Default true: fetch description bodies for the first rows" },
17
+ limit: { type: "number", description: "Max results (1-500, default 100)" },
18
+ },
19
+ required: ["naics"],
20
+ },
21
+ };
22
+ export async function handleGovSolicitations(agent, args) {
23
+ return agent.govSolicitations({
24
+ naics: args.naics,
25
+ notice_types: args.notice_types,
26
+ since_days: args.since_days,
27
+ agencies: args.agencies,
28
+ keywords: args.keywords,
29
+ state: args.state,
30
+ set_aside: args.set_aside,
31
+ active_only: args.active_only,
32
+ has_contact: args.has_contact,
33
+ include_description: args.include_description,
34
+ limit: args.limit,
35
+ });
36
+ }
@@ -15,6 +15,8 @@ import { webSearchTool, handleWebSearch } from "./search.js";
15
15
  import { webReadTool, handleWebRead } from "./web-read.js";
16
16
  import { deepResearchPersonTool, socialProfilesTool, articleSearchTool, personNewsfeedTool, personInterestsTool, personInteractionsTool, handleDeepResearchPerson, handleSocialProfiles, handleArticleSearch, handlePersonNewsfeed, handlePersonInterests, handlePersonInteractions } from "./nyne.js";
17
17
  import { companySearchTool, enrichCompanyTool, handleCompanySearch, handleEnrichCompany } from "./company.js";
18
+ import { localSearchTool, localResolveTool, handleLocalSearch, handleLocalResolve } from "./local.js";
19
+ import { govSolicitationsTool, handleGovSolicitations } from "./gov.js";
18
20
  import { computeTool, computeStatusTool, computeTasksTool, computeCancelTool, computeRespondTool, handleCompute, handleComputeStatus, handleComputeTasks, handleComputeCancel, handleComputeRespond } from "./compute.js";
19
21
  import { listDomainsTool, pauseDomainTool, resumeDomainTool, handleListDomains, handlePauseDomain, handleResumeDomain } from "./domains.js";
20
22
  import { spendBreakdownTool, rocsTool, rocsByGoalTool, receiptsListTool, tagReceiptValueTool, handleSpendBreakdown, handleRocs, handleRocsByGoal, handleReceiptsList, handleTagReceiptValue } from "./analytics.js";
@@ -44,6 +46,9 @@ export const tools = [
44
46
  personInteractionsTool,
45
47
  companySearchTool,
46
48
  enrichCompanyTool,
49
+ localSearchTool,
50
+ localResolveTool,
51
+ govSolicitationsTool,
47
52
  // Commerce
48
53
  commerceSearchTool,
49
54
  commerceBuyTool,
@@ -105,6 +110,9 @@ const handlers = {
105
110
  "oneshot_person_interactions": handlePersonInteractions,
106
111
  "oneshot_company_search": handleCompanySearch,
107
112
  "oneshot_enrich_company": handleEnrichCompany,
113
+ "oneshot_local_search": handleLocalSearch,
114
+ "oneshot_local_resolve": handleLocalResolve,
115
+ "oneshot_gov_solicitations": handleGovSolicitations,
108
116
  // Commerce
109
117
  "oneshot_commerce_search": handleCommerceSearch,
110
118
  "oneshot_commerce_buy": handleCommerceBuy,
@@ -0,0 +1,6 @@
1
+ import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ import { OneShot } from "@oneshot-agent/sdk";
3
+ export declare const localSearchTool: Tool;
4
+ export declare const localResolveTool: Tool;
5
+ export declare function handleLocalSearch(agent: OneShot, args: Record<string, unknown>): Promise<import("@oneshot-agent/sdk").LocalSearchResult>;
6
+ export declare function handleLocalResolve(agent: OneShot, args: Record<string, unknown>): Promise<import("@oneshot-agent/sdk").LocalResolveResult>;
@@ -0,0 +1,60 @@
1
+ export const localSearchTool = {
2
+ name: "oneshot_local_search",
3
+ description: "Discover local main-street businesses (restaurants, contractors, dental practices, auto shops) by category or keywords in a location. Use this instead of people_search for independent local businesses. Flat price per search. Paid tool.",
4
+ inputSchema: {
5
+ type: "object",
6
+ properties: {
7
+ category: { type: "array", items: { type: "string" }, description: "Business categories, e.g. ['hvac contractor', 'dental practice']. category or keywords required." },
8
+ keywords: { type: "array", items: { type: "string" }, description: "Free-text keywords (alternative to category)" },
9
+ location: { type: "array", items: { type: "string" }, description: "Cities, neighborhoods, or 'City, ST' strings (required)" },
10
+ min_rating: { type: "number", description: "Minimum star rating (0-5)" },
11
+ min_review_count: { type: "number", description: "Minimum review count" },
12
+ is_chain: { type: "boolean", description: "true = only chains, false = exclude detected chains" },
13
+ operating_status: { type: "string", enum: ["open", "any"], description: "Default 'open' drops closed businesses" },
14
+ has_domain: { type: "boolean", description: "true = only rows with a resolvable website domain" },
15
+ limit: { type: "number", description: "Max results (1-500, default 100)" },
16
+ },
17
+ required: ["location"],
18
+ anyOf: [{ required: ["category"] }, { required: ["keywords"] }],
19
+ },
20
+ };
21
+ export const localResolveTool = {
22
+ name: "oneshot_local_resolve",
23
+ description: "Resolve a local business name plus one locating field (address, city, postal code, or phone) to its website domain, phone, category, and operating status with a match confidence. A miss returns found=false, not an error. Paid tool.",
24
+ inputSchema: {
25
+ type: "object",
26
+ properties: {
27
+ name: { type: "string", description: "Business name" },
28
+ address: { type: "string", description: "Street address" },
29
+ city: { type: "string", description: "City" },
30
+ region: { type: "string", description: "State / province" },
31
+ postal_code: { type: "string", description: "Postal code" },
32
+ phone: { type: "string", description: "Phone number (strong match signal)" },
33
+ },
34
+ required: ["name"],
35
+ anyOf: [{ required: ["address"] }, { required: ["city"] }, { required: ["postal_code"] }, { required: ["phone"] }],
36
+ },
37
+ };
38
+ export async function handleLocalSearch(agent, args) {
39
+ return agent.localSearch({
40
+ category: args.category,
41
+ keywords: args.keywords,
42
+ location: args.location,
43
+ min_rating: args.min_rating,
44
+ min_review_count: args.min_review_count,
45
+ is_chain: args.is_chain,
46
+ operating_status: args.operating_status,
47
+ has_domain: args.has_domain,
48
+ limit: args.limit,
49
+ });
50
+ }
51
+ export async function handleLocalResolve(agent, args) {
52
+ return agent.localResolve({
53
+ name: args.name,
54
+ address: args.address,
55
+ city: args.city,
56
+ region: args.region,
57
+ postal_code: args.postal_code,
58
+ phone: args.phone,
59
+ });
60
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@oneshot-agent/mcp-server",
3
- "version": "0.17.2",
4
- "description": "MCP server for OneShot - commercial actions for AI agents",
3
+ "version": "0.19.0",
4
+ "description": "MCP server for OneShot - 50 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.28.0",
28
+ "@oneshot-agent/sdk": "^0.31.0",
29
29
  "zod": "3.25.76"
30
30
  },
31
31
  "devDependencies": {