auxiliar-mcp 0.18.0 → 0.22.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 +8 -118
- package/dist/about.d.ts +10 -0
- package/dist/about.js +16 -0
- package/dist/server.js +11 -169
- package/package.json +14 -34
- package/dist/data/capabilities.d.ts +0 -34
- package/dist/data/capabilities.generated.json +0 -33171
- package/dist/data/capabilities.js +0 -62
- package/dist/data/event-sources.d.ts +0 -47
- package/dist/data/event-sources.js +0 -125
- package/dist/data/pricing.d.ts +0 -1
- package/dist/data/pricing.js +0 -582
- package/dist/data/recommendations.d.ts +0 -1
- package/dist/data/recommendations.js +0 -2350
- package/dist/data/risks.d.ts +0 -1
- package/dist/data/risks.js +0 -366
- package/dist/data/solve.d.ts +0 -43
- package/dist/data/solve.js +0 -376
- package/dist/telemetry.d.ts +0 -48
- package/dist/telemetry.js +0 -72
- package/dist/tools/analytics.d.ts +0 -8
- package/dist/tools/analytics.js +0 -54
- package/dist/tools/compare-capabilities.d.ts +0 -35
- package/dist/tools/compare-capabilities.js +0 -101
- package/dist/tools/compatibility.d.ts +0 -16
- package/dist/tools/compatibility.js +0 -245
- package/dist/tools/find-capability.d.ts +0 -58
- package/dist/tools/find-capability.js +0 -161
- package/dist/tools/get-capability.d.ts +0 -21
- package/dist/tools/get-capability.js +0 -22
- package/dist/tools/invoke-capability.d.ts +0 -45
- package/dist/tools/invoke-capability.js +0 -109
- package/dist/tools/list-capabilities.d.ts +0 -39
- package/dist/tools/list-capabilities.js +0 -50
- package/dist/tools/list.d.ts +0 -23
- package/dist/tools/list.js +0 -106
- package/dist/tools/pricing.d.ts +0 -5
- package/dist/tools/pricing.js +0 -29
- package/dist/tools/recommend.d.ts +0 -42
- package/dist/tools/recommend.js +0 -331
- package/dist/tools/risks.d.ts +0 -5
- package/dist/tools/risks.js +0 -14
- package/dist/tools/setup.d.ts +0 -30
- package/dist/tools/setup.js +0 -316
- package/dist/tools/solve.d.ts +0 -31
- package/dist/tools/solve.js +0 -126
- package/dist/types/capability.d.ts +0 -276
- package/dist/types/capability.js +0 -191
package/README.md
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
# auxiliar-mcp
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Web access for AI agents** — search, scrape, extract, and crawl the live web across many providers through one billed API, so your agent fetches more reliably than its host's built-in tools and you never handle upstream API keys.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
`auxiliar-mcp` is the in-loop MCP client for the [auxiliar.ai](https://auxiliar.ai) gateway.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Status: client in active development
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
The gateway is live; the **MCP client surface is being rebuilt** to wrap it (v1.0). During this transition the package ships a single informational tool, `about_auxiliar`, that points your agent at the gateway.
|
|
10
|
+
|
|
11
|
+
To use auxiliar today, get an API key at **[auxiliar.ai](https://auxiliar.ai)** and call the gateway directly over HTTP — one bearer token, one endpoint per capability, credit-metered, with upstream keys injected server-side.
|
|
11
12
|
|
|
12
13
|
## Install
|
|
13
14
|
|
|
@@ -19,121 +20,10 @@ claude mcp add auxiliar -- npx auxiliar-mcp
|
|
|
19
20
|
npx auxiliar-mcp
|
|
20
21
|
```
|
|
21
22
|
|
|
22
|
-
## Tools (8)
|
|
23
|
-
|
|
24
|
-
| Tool | What it does |
|
|
25
|
-
|------|-------------|
|
|
26
|
-
| `solve_task` | Get the ranked list of installable tools for a job-to-be-done (e.g., `pdf-text-extraction-mcp`, `nfs-e`, `boleto`, `receipt-parsing`, `bookkeeping-ocr`) with scorecards, install commands, FAQ, alternatives considered, and methodological caveats. |
|
|
27
|
-
| `list_solve_tasks` | Discover every `/solve/` task ranking available — slugs, top picks, categories, agent compatibility. |
|
|
28
|
-
| `recommend_service` | Picks the best cloud service for your constraints (framework, budget, region, GDPR, edge, lock-in). |
|
|
29
|
-
| `get_pricing` | Chrome-verified pricing — including JS-rendered pages agents can't read via WebFetch. |
|
|
30
|
-
| `get_risks` | Risk flags, gotchas, recent breaking changes. |
|
|
31
|
-
| `check_compatibility` | Warns about known conflicts between services (e.g., Turso + Prisma needs adapter). |
|
|
32
|
-
| `setup_service` | CLI commands, signup URLs, env vars, estimated setup time. |
|
|
33
|
-
| `list_services` | Browse the full 77-service catalog, filtered by category. |
|
|
34
|
-
|
|
35
|
-
## When to use `solve_task`
|
|
36
|
-
|
|
37
|
-
Your agent needs an **installable tool** (skill, MCP, vendor API, or local binary) and you want a reproducible evaluation, not vibes.
|
|
38
|
-
|
|
39
|
-
```
|
|
40
|
-
Agent: "I need to extract text from Brazilian NFS-e invoices, boletos, and phone-photo receipts. What should I install?"
|
|
41
|
-
|
|
42
|
-
→ solve_task(task_slug="pdf-text-extraction-mcp")
|
|
43
|
-
# aliases work too: "pdf", "ocr", "nfs-e", "boleto", "receipt-parsing", "bookkeeping-ocr", "invoice-extraction"
|
|
44
|
-
|
|
45
|
-
Returns (truncated):
|
|
46
|
-
{
|
|
47
|
-
"answer": "Install Surya (pip install surya-ocr + pin transformers<5.0.0). It led our 10-document real-world corpus on word accuracy (76.9%) and layout preservation (7.0/10), free, local. Tesseract 5 runs 14× faster for throughput-critical workflows. Google Document AI wins on phone-photo receipts specifically...",
|
|
48
|
-
"candidates": [
|
|
49
|
-
{ "slug": "surya", "rank": 1, "scorecard": {"word_accuracy": 0.769, "layout": 7, "p50_latency_sec": 22.1, "install_friction": 7, "cost_per_10_docs_usd": 0} },
|
|
50
|
-
{ "slug": "tesseract", "rank": 2, "scorecard": {"word_accuracy": 0.754, "layout": 5, "p50_latency_sec": 1.6, "install_friction": 3, "cost_per_10_docs_usd": 0} },
|
|
51
|
-
{ "slug": "google-document-ai", "rank": 3, "scorecard": {"word_accuracy": 0.697, "layout": 5.7, "p50_latency_sec": 3.8, "install_friction": 7, "cost_per_10_docs_usd": 0.069} }
|
|
52
|
-
],
|
|
53
|
-
"corpus_summary": "10 real-world documents: native-text PDFs, legal docs, Brazilian corporate-registry scans, NFS-e invoices, boletos, phone-photo receipts.",
|
|
54
|
-
"alternatives_considered": [ /* yescan, Mistral OCR, pdf-reader-mcp — dropped with reasons */ ],
|
|
55
|
-
"faq": [ /* e.g., "Why does all score 0 on the boleto?" */ ]
|
|
56
|
-
}
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
Full page with reproducible commands: https://auxiliar.ai/solve/pdf-text-extraction-mcp/
|
|
60
|
-
|
|
61
|
-
## When to use `recommend_service`
|
|
62
|
-
|
|
63
|
-
Your agent needs a **cloud service** (database, email provider, auth, payments, etc.).
|
|
64
|
-
|
|
65
|
-
```
|
|
66
|
-
Agent: "I need a database for my Next.js app. Budget is free, deployed to Cloudflare Workers."
|
|
67
|
-
|
|
68
|
-
→ recommend_service(need="database", framework="nextjs", budget="free", constraints="edge, zero cold starts")
|
|
69
|
-
|
|
70
|
-
Returns:
|
|
71
|
-
{
|
|
72
|
-
"provider": "turso",
|
|
73
|
-
"reason": "Edge-native SQLite with zero cold starts and embedded replicas",
|
|
74
|
-
"pricing": { "free_tier": "5 GB storage, 100 databases" },
|
|
75
|
-
"risks": ["Not PostgreSQL — limited ORM support"],
|
|
76
|
-
"migration_difficulty": "high",
|
|
77
|
-
"cli_install": "brew install tursodatabase/tap/turso",
|
|
78
|
-
"alternatives": [{"provider": "neon", "trade_off": "Has cold starts on free tier"}]
|
|
79
|
-
}
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
## Services Covered (77)
|
|
83
|
-
|
|
84
|
-
**Database:** Neon, Supabase, Turso, PlanetScale, Render Postgres, AWS RDS, Railway Postgres, Cloudflare D1
|
|
85
|
-
**Email:** Resend, Postmark, SendGrid, AWS SES, Mailgun, Listmonk
|
|
86
|
-
**Auth:** Better Auth, Clerk, Auth0, Firebase Auth, Supabase Auth, Auth.js
|
|
87
|
-
**Payments:** Stripe, Lemon Squeezy, Paddle, RevenueCat
|
|
88
|
-
**Deploy:** Vercel, Railway, Render, Fly.io
|
|
89
|
-
**Search:** Algolia, Typesense, Meilisearch, PostgreSQL FTS
|
|
90
|
-
**CMS:** Sanity, Contentful, Strapi, Payload, Keystatic, Directus, Ghost
|
|
91
|
-
**Monitoring:** Sentry, Datadog, PostHog, Grafana Cloud, BetterStack, Highlight.io
|
|
92
|
-
**Storage:** Cloudflare R2, AWS S3, Uploadthing, MinIO
|
|
93
|
-
**Cache:** Upstash Redis, Momento, Dragonfly
|
|
94
|
-
**Queues:** BullMQ, Inngest, Trigger.dev, AWS SQS, CloudAMQP
|
|
95
|
-
**Vector DB:** Pinecone, Weaviate, Qdrant, Chroma
|
|
96
|
-
**LLM APIs:** OpenAI, Anthropic, Google AI, Groq, Together AI, Ollama
|
|
97
|
-
**SMS:** Twilio, Vonage, MessageBird
|
|
98
|
-
**Feature Flags:** LaunchDarkly, Statsig, Flagsmith, Unleash
|
|
99
|
-
**Cron:** Inngest, Trigger.dev, QStash, Vercel Cron, Cloudflare Cron
|
|
100
|
-
**PDF / OCR (via solve_task):** Surya, Tesseract 5, Google Document AI
|
|
101
|
-
|
|
102
|
-
## /solve/ Tasks Available
|
|
103
|
-
|
|
104
|
-
| Slug | Top pick | Corpus | Categories |
|
|
105
|
-
|------|----------|--------|-----------|
|
|
106
|
-
| `pdf-text-extraction-mcp` | Surya | 10 Brazilian docs incl. NFS-e, boleto, phone-photo receipts | pdf-processing, ocr, agent-tools |
|
|
107
|
-
|
|
108
|
-
More `/solve/` rankings added as walkthroughs run. Each page includes its reproducible command so you can re-run the eval yourself.
|
|
109
|
-
|
|
110
|
-
## Data Quality
|
|
111
|
-
|
|
112
|
-
- **/solve/ evals:** reproducible corpus + harness + scoring per task. Ground truth is LLM-drafted, human-finalized. Published commands can be re-run locally.
|
|
113
|
-
- **Cloud-service pricing:** Chrome-verified (actual service websites, not training data). Updated through 2026-04.
|
|
114
|
-
- **Trust scores:** 50+ agent runs across 8 iterations; 47 category aliases; 27 compatibility rules.
|
|
115
|
-
|
|
116
|
-
## Constraints You Can Use on `recommend_service`
|
|
117
|
-
|
|
118
|
-
| Constraint | Example |
|
|
119
|
-
|-----------|---------|
|
|
120
|
-
| Framework | `framework: "nextjs"`, `"sveltekit"`, `"fastapi"`, `"express"` |
|
|
121
|
-
| Budget | `budget: "free"`, `"cheap"`, `"enterprise"` |
|
|
122
|
-
| Region | `region: "eu"` |
|
|
123
|
-
| GDPR | `constraints: "GDPR"` |
|
|
124
|
-
| Edge | `constraints: "edge, zero cold starts, cloudflare workers"` |
|
|
125
|
-
| Lock-in | `constraints: "no vendor lock-in, portable"` |
|
|
126
|
-
| Features | `constraints: "branching, webhooks, inbound email"` |
|
|
127
|
-
|
|
128
|
-
## Privacy
|
|
129
|
-
|
|
130
|
-
The MCP server pings `auxiliar.ai/api/` on each tool call for analytics. Only query parameters are sent (e.g., `?need=database&framework=nextjs` or `?task_slug=pdf-text-extraction-mcp`). No personal data, no API keys, no project info. Works offline with bundled data if the ping fails.
|
|
131
|
-
|
|
132
23
|
## Links
|
|
133
24
|
|
|
134
|
-
- [auxiliar.ai](https://auxiliar.ai) — the
|
|
135
|
-
- [
|
|
136
|
-
- [GitHub](https://github.com/Tlalvarez/Auxiliar-ai) — source + reproducible eval harness under `scripts/ocr-walkthrough/`
|
|
25
|
+
- [auxiliar.ai](https://auxiliar.ai) — the gateway: API keys, docs, and pricing
|
|
26
|
+
- [GitHub](https://github.com/Tlalvarez/Auxiliar-ai) — source
|
|
137
27
|
|
|
138
28
|
## License
|
|
139
29
|
|
package/dist/about.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const ABOUT: {
|
|
2
|
+
readonly product: "auxiliar.ai — web-access API gateway for AI agents";
|
|
3
|
+
readonly what_it_does: "Search, scrape, extract, and crawl the live web across many providers through one billed API. Upstream provider keys are injected server-side, so the agent never handles them; usage is credit-metered against your auxiliar account.";
|
|
4
|
+
readonly status: "The in-loop MCP client that wraps these capabilities is being rebuilt (v1.0). This package is currently a pointer during that transition.";
|
|
5
|
+
readonly how_to_use_today: "Get an API key at https://auxiliar.ai, then call the gateway directly over HTTP with your bearer token (one endpoint per capability).";
|
|
6
|
+
readonly links: {
|
|
7
|
+
readonly home: "https://auxiliar.ai";
|
|
8
|
+
readonly source: "https://github.com/Tlalvarez/Auxiliar-ai";
|
|
9
|
+
};
|
|
10
|
+
};
|
package/dist/about.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// The single source of truth for what `about_auxiliar` returns.
|
|
2
|
+
//
|
|
3
|
+
// auxiliar.ai is a web-access API gateway for AI agents. The in-loop MCP
|
|
4
|
+
// client that wraps the gateway's capabilities is being rebuilt for v1.0;
|
|
5
|
+
// until then this package ships one informational tool that points the
|
|
6
|
+
// agent at the gateway.
|
|
7
|
+
export const ABOUT = {
|
|
8
|
+
product: "auxiliar.ai — web-access API gateway for AI agents",
|
|
9
|
+
what_it_does: "Search, scrape, extract, and crawl the live web across many providers through one billed API. Upstream provider keys are injected server-side, so the agent never handles them; usage is credit-metered against your auxiliar account.",
|
|
10
|
+
status: "The in-loop MCP client that wraps these capabilities is being rebuilt (v1.0). This package is currently a pointer during that transition.",
|
|
11
|
+
how_to_use_today: "Get an API key at https://auxiliar.ai, then call the gateway directly over HTTP with your bearer token (one endpoint per capability).",
|
|
12
|
+
links: {
|
|
13
|
+
home: "https://auxiliar.ai",
|
|
14
|
+
source: "https://github.com/Tlalvarez/Auxiliar-ai",
|
|
15
|
+
},
|
|
16
|
+
};
|
package/dist/server.js
CHANGED
|
@@ -1,181 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
3
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
-
import {
|
|
5
|
-
import { recommendService } from "./tools/recommend.js";
|
|
6
|
-
import { setupService } from "./tools/setup.js";
|
|
7
|
-
import { checkCompatibility } from "./tools/compatibility.js";
|
|
8
|
-
import { getPricing } from "./tools/pricing.js";
|
|
9
|
-
import { getRisks } from "./tools/risks.js";
|
|
10
|
-
import { listServices } from "./tools/list.js";
|
|
11
|
-
import { solveTask, listSolveTasks } from "./tools/solve.js";
|
|
12
|
-
import { findCapability } from "./tools/find-capability.js";
|
|
13
|
-
import { getCapability } from "./tools/get-capability.js";
|
|
14
|
-
import { listCapabilities } from "./tools/list-capabilities.js";
|
|
15
|
-
import { compareCapabilities } from "./tools/compare-capabilities.js";
|
|
16
|
-
import { invokeCapability } from "./tools/invoke-capability.js";
|
|
4
|
+
import { ABOUT } from "./about.js";
|
|
17
5
|
const server = new McpServer({
|
|
18
6
|
name: "auxiliar",
|
|
19
|
-
version: "0.
|
|
20
|
-
});
|
|
21
|
-
// Tool: recommend_service
|
|
22
|
-
server.tool("recommend_service", "Get a current, verified recommendation for a cloud service based on your constraints. Returns pricing, risks, provision commands, and alternatives. Data is Chrome-verified from actual service websites (not stale training data).", {
|
|
23
|
-
need: z.string().max(100).describe("What kind of service you need (database, email, auth, deploy, payments, search, cms, storage, monitoring, cache, queues, vector, llm, sms, feature-flags, cron, pdf-extraction — aliases like 'llm-api', 'file-storage', 'vector-db', 'ocr', 'document-ai', 'invoice-extraction', 'nfs-e' also work)"),
|
|
24
|
-
framework: z.string().max(100).optional().describe("Your framework (nextjs, express, sveltekit, etc.)"),
|
|
25
|
-
region: z.string().max(50).optional().describe("Preferred region (us, eu, etc.)"),
|
|
26
|
-
budget: z.enum(["free", "cheap", "moderate", "enterprise"]).optional().describe("Budget constraint"),
|
|
27
|
-
constraints: z.string().max(500).optional().describe("Any other constraints (e.g., 'GDPR', 'no vendor lock-in', 'already on AWS')"),
|
|
28
|
-
}, async (params) => {
|
|
29
|
-
const result = await recommendService(params);
|
|
30
|
-
return {
|
|
31
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
32
|
-
};
|
|
33
|
-
});
|
|
34
|
-
// Tool: get_pricing
|
|
35
|
-
server.tool("get_pricing", "Get current, Chrome-verified pricing for a specific service. This data comes from actually browsing the service's pricing page (including JS-rendered pages that WebFetch can't read). More current than training data.", {
|
|
36
|
-
service: z.string().max(100).describe("Service slug (e.g., 'neon', 'resend', 'clerk', 'supabase', 'stripe', 'vercel')"),
|
|
37
|
-
}, async (params) => {
|
|
38
|
-
const result = await getPricing(params);
|
|
39
|
-
return {
|
|
40
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
41
|
-
};
|
|
42
|
-
});
|
|
43
|
-
// Tool: get_risks
|
|
44
|
-
server.tool("get_risks", "Get current risk flags, gotchas, and recent breaking changes for a service. Warns about things like removed free tiers, deprecated libraries, pricing changes, and known issues that training data doesn't cover.", {
|
|
45
|
-
service: z.string().max(100).describe("Service slug (e.g., 'neon', 'clerk', 'sendgrid', 'authjs')"),
|
|
46
|
-
}, async (params) => {
|
|
47
|
-
const result = await getRisks(params);
|
|
48
|
-
return {
|
|
49
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
50
|
-
};
|
|
51
|
-
});
|
|
52
|
-
// Tool: check_compatibility
|
|
53
|
-
server.tool("check_compatibility", "Check if a set of services are compatible with each other. Warns about known conflicts, integration issues, or gotchas when using services together (e.g., Turso+Prisma needs adapter, Clerk doesn't support SvelteKit well).", {
|
|
54
|
-
services: z.array(z.string().max(100)).max(20).describe("List of services to check (e.g., ['neon', 'better-auth', 'vercel'])"),
|
|
55
|
-
framework: z.string().max(100).optional().describe("Your framework"),
|
|
56
|
-
}, async (params) => {
|
|
57
|
-
const result = await checkCompatibility(params);
|
|
58
|
-
return {
|
|
59
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
60
|
-
};
|
|
61
|
-
});
|
|
62
|
-
// Tool: setup_service
|
|
63
|
-
server.tool("setup_service", "Get step-by-step setup instructions for a service, including CLI commands (if available), signup URL, required env vars, and estimated time. Does NOT automate signup — gives you the exact steps to follow.", {
|
|
64
|
-
provider: z.string().max(100).describe("The service provider (neon, resend, supabase, vercel, clerk, stripe, better-auth, etc.)"),
|
|
65
|
-
projectName: z.string().max(100).optional().describe("Name for the project/database"),
|
|
66
|
-
region: z.string().max(50).optional().describe("Preferred region"),
|
|
67
|
-
}, async (params) => {
|
|
68
|
-
const result = await setupService(params);
|
|
69
|
-
return {
|
|
70
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
71
|
-
};
|
|
72
|
-
});
|
|
73
|
-
// Tool: list_services
|
|
74
|
-
server.tool("list_services", "List all available services and categories. Use without parameters to see all categories, or specify a category to see its services.", {
|
|
75
|
-
category: z.string().max(100).optional().describe("Category to list services for (e.g., 'database', 'auth', 'email'). Aliases like 'db', 'authentication', 'mail' also work. Omit to see all categories."),
|
|
76
|
-
}, async (params) => {
|
|
77
|
-
const result = await listServices(params);
|
|
78
|
-
return {
|
|
79
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
80
|
-
};
|
|
81
|
-
});
|
|
82
|
-
// Tool: solve_task
|
|
83
|
-
server.tool("solve_task", "Fetch the full /solve/ task ranking for a specific job-to-be-done (e.g., 'extract text from PDFs', 'parse Brazilian NFS-e invoices'). Returns the ranked candidates with install commands, an evaluated scorecard (word accuracy, layout, latency, cost, install friction), alternatives considered and dropped, FAQs, and methodological caveats. Use this when an agent needs to pick an installable tool (skill/MCP/API/local binary) for a task rather than a cloud service. Data comes from a reproducible eval run on a real-world corpus — not training data.", {
|
|
84
|
-
task_slug: z.string().max(100).optional().describe("Task slug (e.g., 'pdf-text-extraction-mcp', 'nfs-e-extraction', 'cnpj-enrichment-mcp'). Aliases that resolve automatically: 'pdf', 'ocr', 'pdf-ocr', 'document-ai', 'invoice-extraction', 'boleto', 'receipt-parsing', 'bookkeeping-ocr' (→ PDF OCR ranking); 'nfs-e', 'nfse', 'nota-fiscal', 'nota-fiscal-eletronica', 'brazilian-invoice', 'cnpj-invoice' (→ NFS-e structured extraction); 'cnpj', 'cnae', 'cnpj-cnae', 'cnpj-to-cnae', 'regime-tributario', 'regime-tributário', 'cnpj-regime-tributario', 'simples-nacional', 'mei', 'tax-registry', 'tax-registry-enrichment', 'cnpj-enrichment', 'razao-social', 'razão-social' (→ CNPJ tax-registry enrichment). Call list_solve_tasks first if you don't know the slug."),
|
|
85
|
-
category: z.string().max(100).optional().describe("Filter by task category (e.g., 'ocr', 'pdf-processing', 'agent-tools'). Returns all matching tasks."),
|
|
86
|
-
}, async (params) => {
|
|
87
|
-
const result = await solveTask(params);
|
|
88
|
-
return {
|
|
89
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
90
|
-
};
|
|
91
|
-
});
|
|
92
|
-
// Tool: list_solve_tasks
|
|
93
|
-
server.tool("list_solve_tasks", "List all available /solve/ task rankings with their top picks. Use this to discover what jobs-to-be-done auxiliar.ai has evaluated installable tools for. Complementary to list_services (cloud services catalog): list_solve_tasks surfaces agent-installable tooling (skills, MCPs, APIs, local binaries) evaluated on real-world corpora.", {}, async () => {
|
|
94
|
-
const result = await listSolveTasks();
|
|
95
|
-
return {
|
|
96
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
97
|
-
};
|
|
7
|
+
version: "0.22.1",
|
|
98
8
|
});
|
|
99
9
|
// ─────────────────────────────────────────────────────────────────────────
|
|
100
|
-
//
|
|
10
|
+
// Transitional surface.
|
|
101
11
|
//
|
|
102
|
-
//
|
|
103
|
-
//
|
|
104
|
-
//
|
|
105
|
-
//
|
|
106
|
-
//
|
|
107
|
-
// The legacy tools above (recommend_service, solve_task, list_services,
|
|
108
|
-
// list_solve_tasks, get_pricing, get_risks, setup_service,
|
|
109
|
-
// check_compatibility) remain wired and continue to work; they wrap the
|
|
110
|
-
// same legacy data sources they always have, and will be removed in a
|
|
111
|
-
// future major version once consumers cut over.
|
|
12
|
+
// auxiliar.ai is now a web-access API gateway for AI agents (search /
|
|
13
|
+
// scrape / extract / crawl across many providers through one billed API,
|
|
14
|
+
// upstream keys injected server-side). The in-loop MCP client that wraps
|
|
15
|
+
// those capabilities is being rebuilt for v1.0. Until then this package
|
|
16
|
+
// ships a single informational tool that points the agent at the gateway.
|
|
112
17
|
// ─────────────────────────────────────────────────────────────────────────
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
jtbd: z.array(z.string().max(60)).max(10).optional().describe("Jobs-to-be-done tags. Capabilities matching at least one tag get a strong score boost. Example: ['nfs-e-extraction', 'bookkeeping']"),
|
|
117
|
-
element_type: z.enum([
|
|
118
|
-
"cloud_service", "installable_tool", "skill", "mcp", "plugin",
|
|
119
|
-
"parser", "hook", "prompt", "data", "task_template",
|
|
120
|
-
]).optional().describe("Restrict to one Capability kind"),
|
|
121
|
-
agent_context: z.string().max(60).optional().describe("Agent host name (claude-code, cursor, claude-desktop, openclaw). Excludes Capabilities verified-incompatible with that host; includes those marked compatible OR not yet evaluated."),
|
|
122
|
-
max_results: z.number().int().min(1).max(50).optional().describe("Max results to return (default 10, max 50)"),
|
|
123
|
-
include_experimental: z.boolean().optional().describe("Include records with experimental=true (default false). Experimental records are ingested from external sources (MCP Registry, Printing Press, etc.) but not yet vetted by the curator fleet — filtered out by default to keep ranking clean. Set true for curator/enrichment dogfooding."),
|
|
124
|
-
}, async (params) => {
|
|
125
|
-
const result = await findCapability(params);
|
|
126
|
-
return {
|
|
127
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
128
|
-
};
|
|
129
|
-
});
|
|
130
|
-
// Tool: get_capability
|
|
131
|
-
server.tool("get_capability", "Fetch the full Capability record by stable slug. Returns every field — pricing tiers, risks, install spec, dependencies, eval records, distribution surfaces, choose_if/avoid_if. Use after find_capability narrows the candidate set, or when the agent already has a known slug from a /solve/ page or prior session.", {
|
|
132
|
-
id: z.string().max(100).describe("Capability id / stable slug (e.g., 'neon', 'auxiliar-nfs-e', 'pdf-text-extraction-mcp')"),
|
|
133
|
-
}, async (params) => {
|
|
134
|
-
const result = await getCapability(params);
|
|
135
|
-
return {
|
|
136
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
137
|
-
};
|
|
138
|
-
});
|
|
139
|
-
// Tool: list_capabilities
|
|
140
|
-
server.tool("list_capabilities", "Filtered enumeration of the Capability index. Replaces list_services + list_solve_tasks — element_type discriminates instead of routing through separate tools. Filters compose (AND): a Capability must match every specified filter. With no filters, returns the full index sorted by name.", {
|
|
141
|
-
element_type: z.enum([
|
|
142
|
-
"cloud_service", "installable_tool", "skill", "mcp", "plugin",
|
|
143
|
-
"parser", "hook", "prompt", "data", "task_template",
|
|
144
|
-
]).optional().describe("Restrict to one Capability kind"),
|
|
145
|
-
category: z.string().max(60).optional().describe("Legacy category match (e.g., 'database', 'email', 'ocr')"),
|
|
146
|
-
jtbd: z.string().max(60).optional().describe("Single jtbd_tag — exact match required"),
|
|
147
|
-
agent_context: z.string().max(60).optional().describe("Exclude Capabilities verified-incompatible with this agent host"),
|
|
148
|
-
}, async (params) => {
|
|
149
|
-
const result = await listCapabilities(params);
|
|
150
|
-
return {
|
|
151
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
152
|
-
};
|
|
153
|
-
});
|
|
154
|
-
// Tool: compare_capabilities
|
|
155
|
-
server.tool("compare_capabilities", "Side-by-side comparison structure for 2-5 Capabilities. Returns each Capability's fields aligned in a uniform row-per-field shape — same data backing as the Hugo /compare/<a>-vs-<b>/ pages but JSON-shaped for in-loop consumption. Use after the agent has a small candidate set and needs to choose.", {
|
|
156
|
-
ids: z.array(z.string().max(100)).min(2).max(5).describe("Capability ids to compare (2-5). Order is preserved in the output rows."),
|
|
157
|
-
}, async (params) => {
|
|
158
|
-
const result = await compareCapabilities(params);
|
|
159
|
-
return {
|
|
160
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
161
|
-
};
|
|
162
|
-
});
|
|
163
|
-
// Tool: invoke_capability
|
|
164
|
-
//
|
|
165
|
-
// Phase 3 of the mcp-gov merge. The Capability index has long described
|
|
166
|
-
// "what each tool does"; invoke_capability is the channel for *calling*
|
|
167
|
-
// them. Routes to api.auxiliar.ai/api/invoke/<slug> where each slug is
|
|
168
|
-
// a Python coroutine in backend/sources/<region>/. Returns the standard
|
|
169
|
-
// envelope {tool, source_module, elapsed_ms, result}.
|
|
170
|
-
server.tool("invoke_capability", "Execute a registered data-plane tool over HTTP. Use this to actually CALL a Capability the agent has discovered via find_capability/get_capability/list_capabilities — fetch a CNPJ, search Lei Rouanet projects, list Brasileirão standings, etc. Pass `tool` as the slug (e.g., 'fetch_cnpj', 'rouanet_projeto_fetch') and `args` as the kwargs dict the underlying function expects. Returns {tool, source_module, elapsed_ms, result}. LOW-sensitivity tools work without auth — set AUXILIAR_GATEWAY_TOKEN for HIGH_PII tools (CPF dossiê, judicial process by CPF, etc.) and for higher rate limits. Caching, rate limits, and retries are handled server-side.", {
|
|
171
|
-
tool: z.string().max(100).describe("Tool slug — the function name in the gateway registry (e.g., 'fetch_cnpj', 'rouanet_projeto_fetch', 'br_futebol_brasileirao_tabela'). Lowercase, underscore-separated, must start with a letter."),
|
|
172
|
-
args: z.record(z.string(), z.unknown()).optional().describe("Keyword arguments for the tool. Pass an empty object for no-arg tools. Unknown args return 400; missing required args return 400."),
|
|
173
|
-
}, async (params) => {
|
|
174
|
-
const result = await invokeCapability(params);
|
|
175
|
-
return {
|
|
176
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
177
|
-
};
|
|
178
|
-
});
|
|
18
|
+
server.tool("about_auxiliar", "Describe what auxiliar.ai is and how an agent uses it today. auxiliar.ai is a web-access API gateway: search, scrape, extract, and crawl the live web across many providers through one billed API, with upstream keys injected server-side. Call this to learn how to get an API key and reach the gateway. (The in-loop web-access tools are in active development for v1.0.)", {}, async () => ({
|
|
19
|
+
content: [{ type: "text", text: JSON.stringify(ABOUT, null, 2) }],
|
|
20
|
+
}));
|
|
179
21
|
async function main() {
|
|
180
22
|
const transport = new StdioServerTransport();
|
|
181
23
|
await server.connect(transport);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "auxiliar-mcp",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.22.1",
|
|
4
|
+
"description": "Web access for AI agents — search, scrape, extract, and crawl across many providers through one billed API, upstream keys injected server-side. In-loop MCP client for the auxiliar.ai gateway; client surface in active development for v1.0.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/server.js",
|
|
7
7
|
"bin": {
|
|
@@ -12,8 +12,7 @@
|
|
|
12
12
|
"README.md"
|
|
13
13
|
],
|
|
14
14
|
"scripts": {
|
|
15
|
-
"build
|
|
16
|
-
"build": "npm run build:data && tsc && chmod +x dist/server.js",
|
|
15
|
+
"build": "rm -rf dist && tsc && chmod +x dist/server.js",
|
|
17
16
|
"test": "node --import tsx test.ts",
|
|
18
17
|
"dev": "tsc --watch",
|
|
19
18
|
"start": "node dist/server.js",
|
|
@@ -28,33 +27,16 @@
|
|
|
28
27
|
"claude-code",
|
|
29
28
|
"claude-desktop",
|
|
30
29
|
"cursor",
|
|
31
|
-
"windsurf",
|
|
32
30
|
"openclaw",
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"bookkeeping",
|
|
43
|
-
"brazilian-invoice",
|
|
44
|
-
"receipt-parsing",
|
|
45
|
-
"solve-task",
|
|
46
|
-
"task-ranking",
|
|
47
|
-
"agent-tools",
|
|
48
|
-
"agent-skills",
|
|
49
|
-
"tool-selection",
|
|
50
|
-
"agent-upgrade",
|
|
51
|
-
"cloud-services",
|
|
52
|
-
"pricing",
|
|
53
|
-
"developer-tools",
|
|
54
|
-
"infrastructure",
|
|
55
|
-
"surya",
|
|
56
|
-
"tesseract",
|
|
57
|
-
"google-document-ai"
|
|
31
|
+
"web-access",
|
|
32
|
+
"web-search",
|
|
33
|
+
"search-api",
|
|
34
|
+
"scraping",
|
|
35
|
+
"web-scraping",
|
|
36
|
+
"crawler",
|
|
37
|
+
"extract",
|
|
38
|
+
"gateway",
|
|
39
|
+
"api-gateway"
|
|
58
40
|
],
|
|
59
41
|
"license": "MIT",
|
|
60
42
|
"repository": {
|
|
@@ -67,13 +49,11 @@
|
|
|
67
49
|
"node": ">=18.0.0"
|
|
68
50
|
},
|
|
69
51
|
"dependencies": {
|
|
70
|
-
"@modelcontextprotocol/sdk": "^1.12.1"
|
|
71
|
-
"zod": "^4.3.6"
|
|
52
|
+
"@modelcontextprotocol/sdk": "^1.12.1"
|
|
72
53
|
},
|
|
73
54
|
"devDependencies": {
|
|
74
55
|
"@types/node": "^22.0.0",
|
|
75
56
|
"tsx": "^4.21.0",
|
|
76
|
-
"typescript": "^5.8.0"
|
|
77
|
-
"yaml": "^2.8.3"
|
|
57
|
+
"typescript": "^5.8.0"
|
|
78
58
|
}
|
|
79
59
|
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Runtime query layer over the unified Capability index (N1 Phase 3).
|
|
3
|
-
*
|
|
4
|
-
* Loads the build-time snapshot at `./capabilities.generated.json` (built by
|
|
5
|
-
* `mcp/scripts/build-capabilities.mjs` from `data/capabilities/*.yml`) and
|
|
6
|
-
* exposes a small functional API for the MCP server tools.
|
|
7
|
-
*
|
|
8
|
-
* The snapshot is validated through the Zod Capability schema **once at
|
|
9
|
-
* module import**. Per-call validation would burn CPU on every tool
|
|
10
|
-
* invocation; one-shot validation at startup catches schema/data drift
|
|
11
|
-
* before the server handles its first request.
|
|
12
|
-
*
|
|
13
|
-
* The MCP server runs on the user's machine, not on AWS. Bundling the
|
|
14
|
-
* snapshot keeps that path AWS-credentialless. DynamoDB is the runtime
|
|
15
|
-
* backing store for the FastAPI side (Hugo build, web visitors, future
|
|
16
|
-
* Costco gateway) — both consumers read from `data/capabilities/*.yml`
|
|
17
|
-
* as the canonical source.
|
|
18
|
-
*/
|
|
19
|
-
import { Capability } from "../types/capability.js";
|
|
20
|
-
/** Return every Capability in the index. Order is YAML filename ascending. */
|
|
21
|
-
export declare function listAllCapabilities(): readonly Capability[];
|
|
22
|
-
/** Fetch one Capability by stable slug, or undefined if absent. */
|
|
23
|
-
export declare function getCapability(id: string): Capability | undefined;
|
|
24
|
-
/** All Capabilities of a single element_type. */
|
|
25
|
-
export declare function listCapabilitiesByElementType(elementType: Capability["element_type"]): readonly Capability[];
|
|
26
|
-
/** Capabilities matching any of the given jtbd_tags (OR semantics). Used by
|
|
27
|
-
* the find_capability tool's task-first query path. */
|
|
28
|
-
export declare function findCapabilitiesByJtbd(tags: readonly string[]): Capability[];
|
|
29
|
-
/** Capabilities matching any of the given category strings. /service/<cat>/
|
|
30
|
-
* list views and the legacy `list_services` tool route through here. */
|
|
31
|
-
export declare function listCapabilitiesByCategory(category: string): Capability[];
|
|
32
|
-
/** Total count — exposed for diagnostics + the homepage's dynamic
|
|
33
|
-
* service-count display. */
|
|
34
|
-
export declare function capabilityCount(): number;
|