auxiliar-mcp 0.11.0 → 0.12.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/dist/data/capabilities.generated.json +496 -2
- package/dist/data/solve.js +124 -0
- package/dist/server.js +18 -1
- package/dist/tools/invoke-capability.d.ts +34 -0
- package/dist/tools/invoke-capability.js +91 -0
- package/dist/tools/solve.js +18 -0
- package/package.json +1 -1
|
@@ -1463,6 +1463,104 @@
|
|
|
1463
1463
|
"page_url": "https://auxiliar.ai/service/better-auth/",
|
|
1464
1464
|
"external_homepage": "https://better-auth.com"
|
|
1465
1465
|
},
|
|
1466
|
+
{
|
|
1467
|
+
"id": "brasilapi-cnpj",
|
|
1468
|
+
"element_type": "data",
|
|
1469
|
+
"name": "BrasilAPI: CNPJ lookup",
|
|
1470
|
+
"description": "Free public CNPJ lookup at https://brasilapi.com.br/api/cnpj/v1/{cnpj} — no auth, no token, drop-in HTTP GET. Returns razao_social, nome_fantasia, CNAE fiscal + secondary CNAEs, opção pelo Simples + MEI, situação cadastral, full address, sócios. Data from Receita Federal open data dumps via MinhaReceita.",
|
|
1471
|
+
"jtbd_tags": [
|
|
1472
|
+
"cnpj-enrichment",
|
|
1473
|
+
"brazilian-company-lookup",
|
|
1474
|
+
"cnae-lookup",
|
|
1475
|
+
"regime-tributario-lookup",
|
|
1476
|
+
"bookkeeping-enrichment",
|
|
1477
|
+
"supplier-registry-enrichment",
|
|
1478
|
+
"kyc-lookup"
|
|
1479
|
+
],
|
|
1480
|
+
"aliases_search": [
|
|
1481
|
+
"BrasilAPI",
|
|
1482
|
+
"BrasilAPI CNPJ",
|
|
1483
|
+
"CNPJ lookup",
|
|
1484
|
+
"CNPJ free API",
|
|
1485
|
+
"razao social lookup",
|
|
1486
|
+
"CNAE lookup",
|
|
1487
|
+
"Simples Nacional lookup",
|
|
1488
|
+
"regime tributário",
|
|
1489
|
+
"bookkeeping CNPJ",
|
|
1490
|
+
"supplier enrichment Brazil",
|
|
1491
|
+
"Brazilian public data API"
|
|
1492
|
+
],
|
|
1493
|
+
"categories": [
|
|
1494
|
+
"public-data",
|
|
1495
|
+
"brazilian-government",
|
|
1496
|
+
"identifiers",
|
|
1497
|
+
"cnpj-enrichment"
|
|
1498
|
+
],
|
|
1499
|
+
"works_with": [],
|
|
1500
|
+
"fit_by_agent": {
|
|
1501
|
+
"claude-code": true,
|
|
1502
|
+
"claude-desktop": true,
|
|
1503
|
+
"cursor": true,
|
|
1504
|
+
"openclaw": true
|
|
1505
|
+
},
|
|
1506
|
+
"evals": [],
|
|
1507
|
+
"cost": {
|
|
1508
|
+
"type": "free",
|
|
1509
|
+
"free_tier": "Unlimited from Vercel CDN; reasonable rate limits per IP (BrasilAPI hosts; no published cap).",
|
|
1510
|
+
"hidden_costs": [
|
|
1511
|
+
"Hosted on Vercel — depends on third-party uptime; no SLA.",
|
|
1512
|
+
"Data freshness depends on MinhaReceita dump cadence (typically monthly); not real-time.",
|
|
1513
|
+
"Heavy usage may trigger Vercel-level throttling — reasonable batches recommended."
|
|
1514
|
+
],
|
|
1515
|
+
"cost_per_unit": {}
|
|
1516
|
+
},
|
|
1517
|
+
"pricing_tiers": [],
|
|
1518
|
+
"compliance": [],
|
|
1519
|
+
"risks": [
|
|
1520
|
+
{
|
|
1521
|
+
"severity": "low",
|
|
1522
|
+
"category": "operational",
|
|
1523
|
+
"description": "Data freshness lags the Receita Federal source by up to ~30 days because BrasilAPI reads from MinhaReceita open data dumps. For real-time situação cadastral changes, pair with a real-time source (cnpja-cnpj paid tier or direct gov.br Conecta)."
|
|
1524
|
+
},
|
|
1525
|
+
{
|
|
1526
|
+
"severity": "low",
|
|
1527
|
+
"category": "supply_chain",
|
|
1528
|
+
"description": "BrasilAPI is community-maintained on Vercel. No SLA, no guaranteed uptime. Production workflows should cache responses and have a fallback (mcp-gov-cnpj-fetch or cnpj-ws)."
|
|
1529
|
+
}
|
|
1530
|
+
],
|
|
1531
|
+
"deps": {
|
|
1532
|
+
"requires": [],
|
|
1533
|
+
"composes_with": [
|
|
1534
|
+
"auxiliar-nfs-e",
|
|
1535
|
+
"nfs-e-parser",
|
|
1536
|
+
"cnpja-cnpj",
|
|
1537
|
+
"cnpj-ws",
|
|
1538
|
+
"mcp-gov-cnpj-fetch"
|
|
1539
|
+
],
|
|
1540
|
+
"conflicts": [],
|
|
1541
|
+
"minimum_runtime": "Any HTTP client"
|
|
1542
|
+
},
|
|
1543
|
+
"install": {
|
|
1544
|
+
"primary": {
|
|
1545
|
+
"install_command": "curl -s \"https://brasilapi.com.br/api/cnpj/v1/CNPJ_DIGITS_ONLY\"",
|
|
1546
|
+
"config_snippet": "# Example: 14 digits, no formatting\ncurl -s \"https://brasilapi.com.br/api/cnpj/v1/00000000000191\" | jq .\n# Returns:\n# {\n# \"razao_social\": \"BANCO DO BRASIL SA\",\n# \"nome_fantasia\": \"...\",\n# \"cnae_fiscal\": 6422100,\n# \"cnae_fiscal_descricao\": \"Bancos múltiplos, com carteira comercial\",\n# \"cnaes_secundarios\": [...],\n# \"opcao_pelo_simples\": false,\n# \"opcao_pelo_mei\": false,\n# \"descricao_situacao_cadastral\": \"ATIVA\",\n# \"logradouro\": \"...\", \"municipio\": \"...\", \"uf\": \"...\",\n# \"qsa\": [...] # sócios\n# }\n",
|
|
1547
|
+
"setup_url": "https://brasilapi.com.br/docs#tag/CNPJ",
|
|
1548
|
+
"estimated_minutes": 1
|
|
1549
|
+
},
|
|
1550
|
+
"by_agent": {},
|
|
1551
|
+
"by_framework": {}
|
|
1552
|
+
},
|
|
1553
|
+
"last_verified": "2026-04-27",
|
|
1554
|
+
"verification_method": "vendor-docs-2026-04-27",
|
|
1555
|
+
"alternatives_considered": [],
|
|
1556
|
+
"compared_to": [],
|
|
1557
|
+
"choose_if": "You want a free, drop-in, no-auth CNPJ lookup with comprehensive fields (CNAE, Simples, address, partners) — ideal for agent-driven bookkeeping enrichment after NFS-e extraction.",
|
|
1558
|
+
"avoid_if": "You need real-time situação cadastral (BrasilAPI lags by ~30 days from the open data dump cadence) or contractually-backed SLA (use cnpja-cnpj paid or direct gov.br Conecta).",
|
|
1559
|
+
"page_url": "https://auxiliar.ai/data/brasilapi-cnpj/",
|
|
1560
|
+
"external_homepage": "https://brasilapi.com.br",
|
|
1561
|
+
"repository": "https://github.com/BrasilAPI/BrasilAPI",
|
|
1562
|
+
"license": "MIT (BrasilAPI code; underlying data from Receita Federal open dump)"
|
|
1563
|
+
},
|
|
1466
1564
|
{
|
|
1467
1565
|
"id": "bullmq",
|
|
1468
1566
|
"element_type": "cloud_service",
|
|
@@ -2197,6 +2295,303 @@
|
|
|
2197
2295
|
"page_url": "https://auxiliar.ai/service/cloudinary/",
|
|
2198
2296
|
"external_homepage": "https://cloudinary.com"
|
|
2199
2297
|
},
|
|
2298
|
+
{
|
|
2299
|
+
"id": "cnpj-enrichment-mcp",
|
|
2300
|
+
"element_type": "task_template",
|
|
2301
|
+
"name": "CNPJ enrichment for Brazilian bookkeeping agents — what to install, ranked",
|
|
2302
|
+
"description": "Ranked CNPJ enrichment sources for AI agents doing Brazilian bookkeeping. After extracting CNPJs from NFS-e invoices (see /solve/nfs-e-extraction/), agents need to enrich each CNPJ with razão social, CNAE, regime tributário (Simples Nacional flag), full address, and partners. BrasilAPI tops the ranking — free, no auth, drop-in URL.",
|
|
2303
|
+
"jtbd_tags": [
|
|
2304
|
+
"cnpj-enrichment",
|
|
2305
|
+
"brazilian-company-lookup",
|
|
2306
|
+
"cnae-lookup",
|
|
2307
|
+
"regime-tributario-lookup",
|
|
2308
|
+
"bookkeeping-enrichment",
|
|
2309
|
+
"supplier-registry-enrichment"
|
|
2310
|
+
],
|
|
2311
|
+
"aliases_search": [
|
|
2312
|
+
"CNPJ enrichment",
|
|
2313
|
+
"CNPJ lookup",
|
|
2314
|
+
"CNPJ to CNAE",
|
|
2315
|
+
"regime tributário lookup",
|
|
2316
|
+
"Simples Nacional lookup",
|
|
2317
|
+
"razao social lookup",
|
|
2318
|
+
"bookkeeping CNPJ",
|
|
2319
|
+
"supplier enrichment Brazil",
|
|
2320
|
+
"CNPJ MCP",
|
|
2321
|
+
"Brazilian company API",
|
|
2322
|
+
"CNPJ → CNAE",
|
|
2323
|
+
"CNPJ → regime tributário"
|
|
2324
|
+
],
|
|
2325
|
+
"categories": [
|
|
2326
|
+
"cnpj-enrichment",
|
|
2327
|
+
"brazilian-bookkeeping",
|
|
2328
|
+
"public-data",
|
|
2329
|
+
"agent-tools",
|
|
2330
|
+
"task-template"
|
|
2331
|
+
],
|
|
2332
|
+
"works_with": [
|
|
2333
|
+
"claude-code",
|
|
2334
|
+
"claude-desktop",
|
|
2335
|
+
"cursor",
|
|
2336
|
+
"openclaw"
|
|
2337
|
+
],
|
|
2338
|
+
"fit_by_agent": {
|
|
2339
|
+
"claude-code": true,
|
|
2340
|
+
"claude-desktop": true,
|
|
2341
|
+
"cursor": true,
|
|
2342
|
+
"openclaw": true
|
|
2343
|
+
},
|
|
2344
|
+
"evals": [
|
|
2345
|
+
{
|
|
2346
|
+
"method_id": "auxiliar-cnpj-enrichment-documented-characteristics-v1",
|
|
2347
|
+
"score": 7,
|
|
2348
|
+
"score_breakdown": {
|
|
2349
|
+
"candidates_ranked": 5,
|
|
2350
|
+
"free_tier_accessibility_top_pick": 10,
|
|
2351
|
+
"field_coverage_top_pick": 9,
|
|
2352
|
+
"regime_tributario_free_tier": 8,
|
|
2353
|
+
"pending_corpus_run": 0
|
|
2354
|
+
},
|
|
2355
|
+
"corpus_id": "auxiliar-cnpj-enrichment-corpus-v1-pending",
|
|
2356
|
+
"last_run": "2026-04-27",
|
|
2357
|
+
"candidates_outranked": 5
|
|
2358
|
+
}
|
|
2359
|
+
],
|
|
2360
|
+
"cost": {
|
|
2361
|
+
"type": "free",
|
|
2362
|
+
"free_tier": "Unlimited (the /solve/ page itself is free; underlying tools have free tiers ranging from no-cap to 3 req/min)",
|
|
2363
|
+
"hidden_costs": [],
|
|
2364
|
+
"cost_per_unit": {}
|
|
2365
|
+
},
|
|
2366
|
+
"pricing_tiers": [],
|
|
2367
|
+
"compliance": [],
|
|
2368
|
+
"risks": [],
|
|
2369
|
+
"deps": {
|
|
2370
|
+
"requires": [],
|
|
2371
|
+
"composes_with": [
|
|
2372
|
+
"brasilapi-cnpj",
|
|
2373
|
+
"cnpja-cnpj",
|
|
2374
|
+
"cnpj-ws",
|
|
2375
|
+
"receitaws-cnpj",
|
|
2376
|
+
"mcp-gov-cnpj-fetch",
|
|
2377
|
+
"auxiliar-nfs-e",
|
|
2378
|
+
"nfs-e-parser",
|
|
2379
|
+
"auxiliar-mcp"
|
|
2380
|
+
],
|
|
2381
|
+
"conflicts": []
|
|
2382
|
+
},
|
|
2383
|
+
"last_verified": "2026-04-27",
|
|
2384
|
+
"verification_method": "auxiliar-cnpj-enrichment-documented-characteristics-v1",
|
|
2385
|
+
"alternatives_considered": [
|
|
2386
|
+
{
|
|
2387
|
+
"name": "Direct gov.br Conecta CNPJ API",
|
|
2388
|
+
"dropped_because": "Official federal API (gov.br/conecta/catalogo/apis/consulta-cnpj) but requires OAuth + government registration that's hostile to drop-in agent usage. Use when the workflow already has a regulated gov.br integration."
|
|
2389
|
+
},
|
|
2390
|
+
{
|
|
2391
|
+
"name": "Speedio",
|
|
2392
|
+
"dropped_because": "Free tier requires email registration; B2B sales-focused with employee-count and revenue-range fields outside the bookkeeping pipeline's CNAE / regime tributário need. Useful for sales enrichment, not for renatoag's bookkeeping use case."
|
|
2393
|
+
},
|
|
2394
|
+
{
|
|
2395
|
+
"name": "Receita Federal scraping (HTML form)",
|
|
2396
|
+
"dropped_because": "The original anti-bot blocker that surfaced this whole /solve/ task — public Receita Federal CNPJ pages are behind anti-bot protection that defeats most scrapers."
|
|
2397
|
+
}
|
|
2398
|
+
],
|
|
2399
|
+
"compared_to": [],
|
|
2400
|
+
"choose_if": "Your agent extracts CNPJs from Brazilian invoices and needs to enrich each with CNAE, regime tributário, and supplier metadata — for bookkeeping batches, accountant handoff, or tax reconciliation.",
|
|
2401
|
+
"avoid_if": "You need real-time situação cadastral for fraud detection or KYC under regulatory mandate — paid CNPJá real-time is the right call there, not a /solve/ ranking optimized for free-tier agent-friendliness.",
|
|
2402
|
+
"page_url": "https://auxiliar.ai/solve/cnpj-enrichment-mcp/"
|
|
2403
|
+
},
|
|
2404
|
+
{
|
|
2405
|
+
"id": "cnpj-ws",
|
|
2406
|
+
"element_type": "data",
|
|
2407
|
+
"name": "CNPJ.ws: free + commercial CNPJ lookup",
|
|
2408
|
+
"description": "Brazilian CNPJ lookup with free 3 req/min public tier (publica.cnpj.ws) and paid 2000 req/min commercial tier. Sources from Receita Federal + Sintegra + Suframa — deeper field coverage than peers (Inscrições Estaduais, branches/filiais, sócios, MEI/Simples flags, full address). Best when bookkeeping needs state registrations.",
|
|
2409
|
+
"jtbd_tags": [
|
|
2410
|
+
"cnpj-enrichment",
|
|
2411
|
+
"brazilian-company-lookup",
|
|
2412
|
+
"cnae-lookup",
|
|
2413
|
+
"regime-tributario-lookup",
|
|
2414
|
+
"bookkeeping-enrichment",
|
|
2415
|
+
"supplier-registry-enrichment",
|
|
2416
|
+
"inscricao-estadual-lookup",
|
|
2417
|
+
"kyc-lookup"
|
|
2418
|
+
],
|
|
2419
|
+
"aliases_search": [
|
|
2420
|
+
"CNPJ.ws",
|
|
2421
|
+
"CNPJ ws",
|
|
2422
|
+
"Sintegra lookup",
|
|
2423
|
+
"Suframa lookup",
|
|
2424
|
+
"inscrição estadual",
|
|
2425
|
+
"branches CNPJ",
|
|
2426
|
+
"filiais CNPJ",
|
|
2427
|
+
"sócios CNPJ",
|
|
2428
|
+
"MEI lookup",
|
|
2429
|
+
"Simples Nacional lookup",
|
|
2430
|
+
"bookkeeping CNPJ"
|
|
2431
|
+
],
|
|
2432
|
+
"categories": [
|
|
2433
|
+
"public-data",
|
|
2434
|
+
"brazilian-government",
|
|
2435
|
+
"identifiers",
|
|
2436
|
+
"cnpj-enrichment"
|
|
2437
|
+
],
|
|
2438
|
+
"works_with": [],
|
|
2439
|
+
"fit_by_agent": {
|
|
2440
|
+
"claude-code": true,
|
|
2441
|
+
"claude-desktop": true,
|
|
2442
|
+
"cursor": true,
|
|
2443
|
+
"openclaw": true
|
|
2444
|
+
},
|
|
2445
|
+
"evals": [],
|
|
2446
|
+
"cost": {
|
|
2447
|
+
"type": "freemium",
|
|
2448
|
+
"free_tier": "3 requests/minute on publica.cnpj.ws — no auth required.",
|
|
2449
|
+
"paid_starts": "Commercial tier (comercial.cnpj.ws): 2000 req/min, falls to 4 req/min after monthly cap. Contact vendor for current pricing.",
|
|
2450
|
+
"hidden_costs": [
|
|
2451
|
+
"Free tier 3 req/min cap blocks bulk batch enrichment — same constraint as ReceitaWS.",
|
|
2452
|
+
"Paid tier monthly query cap drops throughput to 4 req/min once exhausted."
|
|
2453
|
+
],
|
|
2454
|
+
"cost_per_unit": {}
|
|
2455
|
+
},
|
|
2456
|
+
"pricing_tiers": [],
|
|
2457
|
+
"compliance": [],
|
|
2458
|
+
"risks": [
|
|
2459
|
+
{
|
|
2460
|
+
"severity": "low",
|
|
2461
|
+
"category": "pricing_unpredictability",
|
|
2462
|
+
"description": "Paid-tier monthly cap drops throughput by 500x (2000 → 4 req/min) when exhausted. Plan for predictable monthly volume or build retry-with-backoff into bulk workflows."
|
|
2463
|
+
},
|
|
2464
|
+
{
|
|
2465
|
+
"severity": "low",
|
|
2466
|
+
"category": "operational",
|
|
2467
|
+
"description": "Sintegra and Suframa data freshness depends on each state's reporting cadence — not all states report at the same interval, so Inscrições Estaduais may be stale for fast-moving registrations."
|
|
2468
|
+
}
|
|
2469
|
+
],
|
|
2470
|
+
"deps": {
|
|
2471
|
+
"requires": [],
|
|
2472
|
+
"composes_with": [
|
|
2473
|
+
"auxiliar-nfs-e",
|
|
2474
|
+
"nfs-e-parser",
|
|
2475
|
+
"brasilapi-cnpj",
|
|
2476
|
+
"cnpja-cnpj"
|
|
2477
|
+
],
|
|
2478
|
+
"conflicts": [],
|
|
2479
|
+
"minimum_runtime": "Any HTTP client"
|
|
2480
|
+
},
|
|
2481
|
+
"install": {
|
|
2482
|
+
"primary": {
|
|
2483
|
+
"install_command": "curl -s \"https://publica.cnpj.ws/cnpj/CNPJ_DIGITS_ONLY\"",
|
|
2484
|
+
"config_snippet": "# Free tier (3 req/min):\ncurl -s \"https://publica.cnpj.ws/cnpj/00000000000191\"\n# Returns nested object with razao_social, atividade_principal (CNAE),\n# estabelecimento (full address + filiais), socios, simples, simei,\n# inscricoes_estaduais (per state).\n#\n# Commercial tier (with token for higher throughput):\ncurl -s -H \"Authorization: Bearer YOUR_TOKEN\" \"https://comercial.cnpj.ws/cnpj/00000000000191\"\n",
|
|
2485
|
+
"setup_url": "https://www.cnpj.ws",
|
|
2486
|
+
"estimated_minutes": 2
|
|
2487
|
+
},
|
|
2488
|
+
"by_agent": {},
|
|
2489
|
+
"by_framework": {}
|
|
2490
|
+
},
|
|
2491
|
+
"last_verified": "2026-04-27",
|
|
2492
|
+
"verification_method": "vendor-docs-2026-04-27",
|
|
2493
|
+
"alternatives_considered": [],
|
|
2494
|
+
"compared_to": [],
|
|
2495
|
+
"choose_if": "Your bookkeeping pipeline needs more than CNAE + situação — specifically Inscrições Estaduais (Sintegra), Suframa, branch/filial details, or full sócio list with participation percentages.",
|
|
2496
|
+
"avoid_if": "You only need basic CNAE + Simples flag (BrasilAPI is simpler) or you need real-time data not bound by state-reporting cadence.",
|
|
2497
|
+
"page_url": "https://auxiliar.ai/data/cnpj-ws/",
|
|
2498
|
+
"external_homepage": "https://www.cnpj.ws",
|
|
2499
|
+
"license": "Proprietary (vendor-managed)"
|
|
2500
|
+
},
|
|
2501
|
+
{
|
|
2502
|
+
"id": "cnpja-cnpj",
|
|
2503
|
+
"element_type": "data",
|
|
2504
|
+
"name": "CNPJá: CNPJ lookup (free cached + paid real-time)",
|
|
2505
|
+
"description": "Brazilian CNPJ lookup with two tiers: open.cnpja.com (free, cached daily, no auth) and api.cnpja.com (paid, real-time against Receita Federal, token auth, higher rate limits). Distinguishing feature versus BrasilAPI / CNPJ.ws is the paid real-time tier — situação cadastral changes hit within minutes, not the ~30-day data-dump lag.",
|
|
2506
|
+
"jtbd_tags": [
|
|
2507
|
+
"cnpj-enrichment",
|
|
2508
|
+
"brazilian-company-lookup",
|
|
2509
|
+
"cnae-lookup",
|
|
2510
|
+
"regime-tributario-lookup",
|
|
2511
|
+
"bookkeeping-enrichment",
|
|
2512
|
+
"supplier-registry-enrichment",
|
|
2513
|
+
"kyc-lookup",
|
|
2514
|
+
"real-time-cnpj-status"
|
|
2515
|
+
],
|
|
2516
|
+
"aliases_search": [
|
|
2517
|
+
"CNPJá",
|
|
2518
|
+
"cnpja",
|
|
2519
|
+
"CNPJa CNPJ",
|
|
2520
|
+
"real-time CNPJ",
|
|
2521
|
+
"situação cadastral real-time",
|
|
2522
|
+
"CNPJ KYC",
|
|
2523
|
+
"CNPJ enrichment paid",
|
|
2524
|
+
"bookkeeping CNPJ"
|
|
2525
|
+
],
|
|
2526
|
+
"categories": [
|
|
2527
|
+
"public-data",
|
|
2528
|
+
"brazilian-government",
|
|
2529
|
+
"identifiers",
|
|
2530
|
+
"cnpj-enrichment"
|
|
2531
|
+
],
|
|
2532
|
+
"works_with": [],
|
|
2533
|
+
"fit_by_agent": {
|
|
2534
|
+
"claude-code": true,
|
|
2535
|
+
"claude-desktop": true,
|
|
2536
|
+
"cursor": true,
|
|
2537
|
+
"openclaw": true
|
|
2538
|
+
},
|
|
2539
|
+
"evals": [],
|
|
2540
|
+
"cost": {
|
|
2541
|
+
"type": "freemium",
|
|
2542
|
+
"free_tier": "open.cnpja.com — no auth, cached daily; reasonable rate limits per IP.",
|
|
2543
|
+
"paid_starts": "api.cnpja.com paid plans (pricing on vendor site; tier-based, token auth, real-time).",
|
|
2544
|
+
"hidden_costs": [
|
|
2545
|
+
"Free tier (open.cnpja.com) is cached daily — not real-time. Plan accordingly when situação cadastral matters.",
|
|
2546
|
+
"Paid tier billing model varies (per-call vs monthly subscription) — verify before scaling."
|
|
2547
|
+
],
|
|
2548
|
+
"cost_per_unit": {}
|
|
2549
|
+
},
|
|
2550
|
+
"pricing_tiers": [],
|
|
2551
|
+
"compliance": [],
|
|
2552
|
+
"risks": [
|
|
2553
|
+
{
|
|
2554
|
+
"severity": "low",
|
|
2555
|
+
"category": "pricing_unpredictability",
|
|
2556
|
+
"description": "Paid tier scales with volume; per-call costs add up at high enrichment volumes. Cache aggressively when situação cadastral doesn't need real-time freshness."
|
|
2557
|
+
},
|
|
2558
|
+
{
|
|
2559
|
+
"severity": "low",
|
|
2560
|
+
"category": "vendor_lockin",
|
|
2561
|
+
"description": "Paid-tier response shape may differ from free-tier; build a normalization layer so callers don't need to change between free and paid."
|
|
2562
|
+
}
|
|
2563
|
+
],
|
|
2564
|
+
"deps": {
|
|
2565
|
+
"requires": [],
|
|
2566
|
+
"composes_with": [
|
|
2567
|
+
"auxiliar-nfs-e",
|
|
2568
|
+
"nfs-e-parser",
|
|
2569
|
+
"brasilapi-cnpj",
|
|
2570
|
+
"cnpj-ws"
|
|
2571
|
+
],
|
|
2572
|
+
"conflicts": [],
|
|
2573
|
+
"minimum_runtime": "Any HTTP client"
|
|
2574
|
+
},
|
|
2575
|
+
"install": {
|
|
2576
|
+
"primary": {
|
|
2577
|
+
"install_command": "curl -s \"https://open.cnpja.com/office/CNPJ_DIGITS_ONLY\"",
|
|
2578
|
+
"config_snippet": "# Free cached endpoint (open.cnpja.com — no auth):\ncurl -s \"https://open.cnpja.com/office/00000000000191\"\n# Returns office object with company name, registrations\n# (Receita + Inscrições Estaduais), address, atividade_principal (CNAE),\n# sócios, simples, situação cadastral.\n#\n# Paid real-time endpoint (api.cnpja.com — token in Authorization header):\ncurl -s -H \"Authorization: Bearer YOUR_TOKEN\" \"https://api.cnpja.com/office/00000000000191\"\n",
|
|
2579
|
+
"setup_url": "https://cnpja.com/api",
|
|
2580
|
+
"estimated_minutes": 2
|
|
2581
|
+
},
|
|
2582
|
+
"by_agent": {},
|
|
2583
|
+
"by_framework": {}
|
|
2584
|
+
},
|
|
2585
|
+
"last_verified": "2026-04-27",
|
|
2586
|
+
"verification_method": "vendor-docs-2026-04-27",
|
|
2587
|
+
"alternatives_considered": [],
|
|
2588
|
+
"compared_to": [],
|
|
2589
|
+
"choose_if": "You need real-time situação cadastral changes (KYC, regulated workflows, fraud-detection pipelines) and the ~30-day BrasilAPI / CNPJ.ws data-dump lag isn't acceptable. Free cached tier is also a good drop-in if real-time isn't required.",
|
|
2590
|
+
"avoid_if": "Daily-fresh data is good enough (BrasilAPI is simpler and free-without-cap) or you're budget-constrained — paid real-time scales per-call.",
|
|
2591
|
+
"page_url": "https://auxiliar.ai/data/cnpja-cnpj/",
|
|
2592
|
+
"external_homepage": "https://cnpja.com",
|
|
2593
|
+
"license": "Proprietary (vendor-managed)"
|
|
2594
|
+
},
|
|
2200
2595
|
{
|
|
2201
2596
|
"id": "contentful",
|
|
2202
2597
|
"element_type": "cloud_service",
|
|
@@ -4180,7 +4575,10 @@
|
|
|
4180
4575
|
"brazilian-company-lookup",
|
|
4181
4576
|
"receita-federal",
|
|
4182
4577
|
"bookkeeping-enrichment",
|
|
4183
|
-
"kyc-lookup"
|
|
4578
|
+
"kyc-lookup",
|
|
4579
|
+
"cnae-lookup",
|
|
4580
|
+
"regime-tributario-lookup",
|
|
4581
|
+
"supplier-registry-enrichment"
|
|
4184
4582
|
],
|
|
4185
4583
|
"aliases_search": [
|
|
4186
4584
|
"CNPJ lookup",
|
|
@@ -4189,7 +4587,12 @@
|
|
|
4189
4587
|
"Brazilian company lookup",
|
|
4190
4588
|
"razao social lookup",
|
|
4191
4589
|
"CNAE lookup",
|
|
4192
|
-
"empresa Receita"
|
|
4590
|
+
"empresa Receita",
|
|
4591
|
+
"regime tributário",
|
|
4592
|
+
"Simples Nacional lookup",
|
|
4593
|
+
"CNAE fiscal",
|
|
4594
|
+
"supplier enrichment Brazil",
|
|
4595
|
+
"bookkeeping CNPJ"
|
|
4193
4596
|
],
|
|
4194
4597
|
"categories": [
|
|
4195
4598
|
"public-data",
|
|
@@ -6585,6 +6988,97 @@
|
|
|
6585
6988
|
"page_url": "https://auxiliar.ai/service/railway/",
|
|
6586
6989
|
"external_homepage": "https://railway.com"
|
|
6587
6990
|
},
|
|
6991
|
+
{
|
|
6992
|
+
"id": "receitaws-cnpj",
|
|
6993
|
+
"element_type": "data",
|
|
6994
|
+
"name": "ReceitaWS: CNPJ lookup",
|
|
6995
|
+
"description": "Long-running Brazilian CNPJ lookup API at https://receitaws.com.br/v1/cnpj/{cnpj}. Free public tier rate-limited to 3 req/min; paid premium tier with token unlocks higher throughput. Returns razao_social, atividade_principal (CNAE), atividades secundárias, situação, address. Simples Nacional flag is a paid-tier field.",
|
|
6996
|
+
"jtbd_tags": [
|
|
6997
|
+
"cnpj-enrichment",
|
|
6998
|
+
"brazilian-company-lookup",
|
|
6999
|
+
"cnae-lookup",
|
|
7000
|
+
"bookkeeping-enrichment",
|
|
7001
|
+
"supplier-registry-enrichment",
|
|
7002
|
+
"kyc-lookup"
|
|
7003
|
+
],
|
|
7004
|
+
"aliases_search": [
|
|
7005
|
+
"ReceitaWS",
|
|
7006
|
+
"Receita WS",
|
|
7007
|
+
"CNPJ lookup API",
|
|
7008
|
+
"razao social lookup",
|
|
7009
|
+
"CNAE lookup",
|
|
7010
|
+
"atividade principal",
|
|
7011
|
+
"bookkeeping CNPJ"
|
|
7012
|
+
],
|
|
7013
|
+
"categories": [
|
|
7014
|
+
"public-data",
|
|
7015
|
+
"brazilian-government",
|
|
7016
|
+
"identifiers",
|
|
7017
|
+
"cnpj-enrichment"
|
|
7018
|
+
],
|
|
7019
|
+
"works_with": [],
|
|
7020
|
+
"fit_by_agent": {
|
|
7021
|
+
"claude-code": true,
|
|
7022
|
+
"claude-desktop": true,
|
|
7023
|
+
"cursor": true,
|
|
7024
|
+
"openclaw": true
|
|
7025
|
+
},
|
|
7026
|
+
"evals": [],
|
|
7027
|
+
"cost": {
|
|
7028
|
+
"type": "freemium",
|
|
7029
|
+
"free_tier": "3 requests per minute — public endpoint, no token required.",
|
|
7030
|
+
"paid_starts": "Premium tier with token (token-based pricing not publicly listed; contact ReceitaWS).",
|
|
7031
|
+
"hidden_costs": [
|
|
7032
|
+
"3 req/min cap on free tier blocks any bulk enrichment workflow — practical only for ad-hoc lookups.",
|
|
7033
|
+
"Simples Nacional flag is a paid-tier field — free tier returns it as null."
|
|
7034
|
+
],
|
|
7035
|
+
"cost_per_unit": {}
|
|
7036
|
+
},
|
|
7037
|
+
"pricing_tiers": [],
|
|
7038
|
+
"compliance": [],
|
|
7039
|
+
"risks": [
|
|
7040
|
+
{
|
|
7041
|
+
"severity": "medium",
|
|
7042
|
+
"category": "pricing_unpredictability",
|
|
7043
|
+
"description": "Free-tier 3 req/min is hard-rate-limited; bursting agents will get 429s. For any bookkeeping workflow with >3 invoices/min, plan to use paid tier OR fall back to BrasilAPI (no rate limit) OR batch with explicit retry-with-backoff."
|
|
7044
|
+
},
|
|
7045
|
+
{
|
|
7046
|
+
"severity": "low",
|
|
7047
|
+
"category": "operational",
|
|
7048
|
+
"description": "Single endpoint, single vendor. No SLA published for free tier."
|
|
7049
|
+
}
|
|
7050
|
+
],
|
|
7051
|
+
"deps": {
|
|
7052
|
+
"requires": [],
|
|
7053
|
+
"composes_with": [
|
|
7054
|
+
"auxiliar-nfs-e",
|
|
7055
|
+
"nfs-e-parser",
|
|
7056
|
+
"brasilapi-cnpj",
|
|
7057
|
+
"cnpj-ws"
|
|
7058
|
+
],
|
|
7059
|
+
"conflicts": [],
|
|
7060
|
+
"minimum_runtime": "Any HTTP client"
|
|
7061
|
+
},
|
|
7062
|
+
"install": {
|
|
7063
|
+
"primary": {
|
|
7064
|
+
"install_command": "curl -s \"https://receitaws.com.br/v1/cnpj/CNPJ_DIGITS_ONLY\"",
|
|
7065
|
+
"config_snippet": "# Free public tier, 3 req/min cap:\ncurl -s \"https://receitaws.com.br/v1/cnpj/00000000000191\"\n# Returns:\n# {\n# \"status\": \"OK\",\n# \"nome\": \"BANCO DO BRASIL SA\",\n# \"fantasia\": \"...\",\n# \"atividade_principal\": [{\"code\": \"64.22-1-00\", \"text\": \"Bancos múltiplos...\"}],\n# \"atividades_secundarias\": [...],\n# \"logradouro\": \"...\", \"municipio\": \"...\", \"uf\": \"...\",\n# \"situacao\": \"ATIVA\",\n# \"simples\": null # paid-tier field\n# }\n#\n# Paid premium tier — pass token in Authorization header:\ncurl -s -H \"Authorization: Bearer YOUR_TOKEN\" \"https://receitaws.com.br/v1/cnpj/00000000000191\"\n",
|
|
7066
|
+
"setup_url": "https://receitaws.com.br",
|
|
7067
|
+
"estimated_minutes": 1
|
|
7068
|
+
},
|
|
7069
|
+
"by_agent": {},
|
|
7070
|
+
"by_framework": {}
|
|
7071
|
+
},
|
|
7072
|
+
"last_verified": "2026-04-27",
|
|
7073
|
+
"verification_method": "vendor-docs-2026-04-27",
|
|
7074
|
+
"alternatives_considered": [],
|
|
7075
|
+
"compared_to": [],
|
|
7076
|
+
"choose_if": "You're doing ad-hoc CNPJ lookups (≤3 per minute) and want the simplest possible drop-in API with a long, stable history.",
|
|
7077
|
+
"avoid_if": "You need bulk enrichment (>3 req/min on free tier hits 429), Simples Nacional flag on free tier (paid-only field), or modern field shapes (BrasilAPI returns richer data).",
|
|
7078
|
+
"page_url": "https://auxiliar.ai/data/receitaws-cnpj/",
|
|
7079
|
+
"external_homepage": "https://receitaws.com.br",
|
|
7080
|
+
"license": "Proprietary (vendor-managed)"
|
|
7081
|
+
},
|
|
6588
7082
|
{
|
|
6589
7083
|
"id": "redis-cloud",
|
|
6590
7084
|
"element_type": "cloud_service",
|
package/dist/data/solve.js
CHANGED
|
@@ -231,4 +231,128 @@ export const solveTasks = {
|
|
|
231
231
|
openclaw: { "auxiliar-nfs-e-with-surya": true, "auxiliar-nfs-e-with-google-doc-ai": true, "auxiliar-nfs-e-with-tesseract": true },
|
|
232
232
|
},
|
|
233
233
|
},
|
|
234
|
+
"cnpj-enrichment-mcp": {
|
|
235
|
+
slug: "cnpj-enrichment-mcp",
|
|
236
|
+
title: "CNPJ enrichment for Brazilian bookkeeping agents — what to install, ranked",
|
|
237
|
+
url: "https://auxiliar.ai/solve/cnpj-enrichment-mcp/",
|
|
238
|
+
last_verified: "2026-04-27",
|
|
239
|
+
categories: ["cnpj-enrichment", "brazilian-bookkeeping", "public-data", "agent-tools"],
|
|
240
|
+
works_with: ["claude-code", "claude-desktop", "cursor", "openclaw"],
|
|
241
|
+
alternatives: ["brasilapi-cnpj", "cnpja-cnpj", "cnpj-ws", "receitaws-cnpj", "mcp-gov-cnpj-fetch"],
|
|
242
|
+
eval_method: "auxiliar-cnpj-enrichment-documented-characteristics-v1 (5 candidates ranked by free-tier accessibility + field coverage; field-accuracy corpus eval is Phase-2 follow-up)",
|
|
243
|
+
answer: "When your Claude Code / OpenClaw agent has extracted CNPJs from NFS-e invoices and needs to enrich each one with razão social, CNAE, regime tributário (Simples Nacional flag), full address, partners, and supplier metadata — for bookkeeping batches, accountant handoff, or tax reconciliation — install BrasilAPI's free public endpoint: `curl https://brasilapi.com.br/api/cnpj/v1/<cnpj>`. Free, no auth, no token, drop-in URL; returns CNAE fiscal + secondary CNAEs, opção pelo Simples + MEI, situação cadastral, full address, sócios — sourced from Receita Federal open data dumps via MinhaReceita. For real-time situação cadastral, use CNPJá's paid api.cnpja.com tier. For Inscrições Estaduais (Sintegra) + branches, use CNPJ.ws.",
|
|
244
|
+
candidates: [
|
|
245
|
+
{
|
|
246
|
+
slug: "brasilapi-cnpj",
|
|
247
|
+
name: "BrasilAPI CNPJ",
|
|
248
|
+
rank: 1,
|
|
249
|
+
install: 'curl -s "https://brasilapi.com.br/api/cnpj/v1/CNPJ_DIGITS_ONLY"',
|
|
250
|
+
scorecard: {
|
|
251
|
+
install_friction: 1,
|
|
252
|
+
cost_per_10_docs_usd: 0,
|
|
253
|
+
},
|
|
254
|
+
notes: "Free, no auth, no token. Drop-in HTTP GET. Returns CNAE primary + secondary, Simples + MEI flags, full address, sócios, situação cadastral. Data sourced from Receita Federal open dumps via MinhaReceita (~30-day lag). Hosted on Vercel CDN. The agent-friendliest default.",
|
|
255
|
+
license: "MIT (BrasilAPI code; underlying data from Receita Federal open dump)",
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
slug: "cnpja-cnpj",
|
|
259
|
+
name: "CNPJá (free cached + paid real-time)",
|
|
260
|
+
rank: 2,
|
|
261
|
+
install: 'curl -s "https://open.cnpja.com/office/CNPJ_DIGITS_ONLY"',
|
|
262
|
+
scorecard: {
|
|
263
|
+
install_friction: 2,
|
|
264
|
+
cost_per_10_docs_usd: 0,
|
|
265
|
+
},
|
|
266
|
+
notes: "Two tiers: open.cnpja.com (free, cached daily, no auth) and api.cnpja.com (paid, real-time against Receita Federal, token auth). Distinguishing feature is the paid real-time tier — situação cadastral changes hit within minutes. Pick when KYC/fraud freshness matters.",
|
|
267
|
+
license: "Proprietary",
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
slug: "cnpj-ws",
|
|
271
|
+
name: "CNPJ.ws (free 3 req/min + paid commercial)",
|
|
272
|
+
rank: 3,
|
|
273
|
+
install: 'curl -s "https://publica.cnpj.ws/cnpj/CNPJ_DIGITS_ONLY"',
|
|
274
|
+
scorecard: {
|
|
275
|
+
install_friction: 2,
|
|
276
|
+
cost_per_10_docs_usd: 0,
|
|
277
|
+
},
|
|
278
|
+
notes: "Free tier 3 req/min on publica.cnpj.ws; paid commercial.cnpj.ws at 2000 req/min. Sources from Receita Federal + Sintegra + Suframa — deeper field coverage than peers (Inscrições Estaduais, branches/filiais, sócios with participation %).",
|
|
279
|
+
license: "Proprietary",
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
slug: "receitaws-cnpj",
|
|
283
|
+
name: "ReceitaWS",
|
|
284
|
+
rank: 4,
|
|
285
|
+
install: 'curl -s "https://receitaws.com.br/v1/cnpj/CNPJ_DIGITS_ONLY"',
|
|
286
|
+
scorecard: {
|
|
287
|
+
install_friction: 2,
|
|
288
|
+
cost_per_10_docs_usd: 0,
|
|
289
|
+
},
|
|
290
|
+
notes: "Long-running canonical Brazilian CNPJ API. Free 3 req/min cap; paid premium tier with token unlocks higher throughput. Simples Nacional flag is a paid-tier-only field — the free response returns simples: null. Simplest possible drop-in shape but slow on free tier.",
|
|
291
|
+
license: "Proprietary",
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
slug: "mcp-gov-cnpj-fetch",
|
|
295
|
+
name: "mcp-gov-cnpj-fetch",
|
|
296
|
+
rank: 5,
|
|
297
|
+
install: "claude mcp add mcp-gov npx mcp-gov",
|
|
298
|
+
scorecard: {
|
|
299
|
+
install_friction: 3,
|
|
300
|
+
cost_per_10_docs_usd: 0,
|
|
301
|
+
},
|
|
302
|
+
notes: "MCP-routed wrapper for in-loop agent calls. Use when the agent prefers tool-call shape over HTTP, or when chaining mcp-gov for other public-data lookups (CEP, CNAE description, RAIS) in the same session.",
|
|
303
|
+
license: "Per mcp-gov upstream",
|
|
304
|
+
},
|
|
305
|
+
],
|
|
306
|
+
corpus_summary: "Documented vendor characteristics — free-tier accessibility, field coverage, real-time vs cached freshness, agent-friendliness — verified via direct curl tests against well-known CNPJs (Banco do Brasil 00.000.000/0001-91 etc.) on 2026-04-27. A 5–10 CNPJ field-accuracy corpus eval is Phase-2 follow-up tracked in backlog.md.",
|
|
307
|
+
alternatives_considered: [
|
|
308
|
+
{
|
|
309
|
+
name: "Direct gov.br Conecta CNPJ API",
|
|
310
|
+
dropped_because: "Official federal API (gov.br/conecta/catalogo/apis/consulta-cnpj) but requires OAuth + government registration that's hostile to drop-in agent usage. Use when the workflow already has a regulated gov.br integration.",
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
name: "Speedio",
|
|
314
|
+
dropped_because: "Free tier requires email registration; B2B sales-focused with employee-count and revenue-range fields outside the bookkeeping pipeline's CNAE / regime tributário need. Useful for sales enrichment, not for bookkeeping.",
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
name: "Receita Federal HTML scraping",
|
|
318
|
+
dropped_because: "The original anti-bot blocker that surfaced this whole /solve/ task — public Receita Federal CNPJ pages are behind anti-bot protection that defeats most scrapers.",
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
name: "Serasa / Quod commercial enrichment",
|
|
322
|
+
dropped_because: "Enterprise-grade with KYC + fraud signals, but contract-only, no agent-friendly drop-in API; out of scope for free-tier-first agent workflows.",
|
|
323
|
+
},
|
|
324
|
+
],
|
|
325
|
+
faq: [
|
|
326
|
+
{
|
|
327
|
+
q: "Does BrasilAPI return regime tributário (Simples Nacional flag) on the free tier?",
|
|
328
|
+
a: "Yes. BrasilAPI's CNPJ response includes opcao_pelo_simples: bool and opcao_pelo_mei: bool directly in the free response. ReceitaWS gates this field behind the paid tier — the free response returns simples: null. CNPJ.ws and CNPJá return Simples + MEI flags on their free tiers as well.",
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
q: "When does the ~30-day data-dump lag actually matter?",
|
|
332
|
+
a: "Three cases. (1) Fraud detection — a CNPJ that became INAPTA or BAIXADA last week needs real-time to catch. (2) KYC at supplier-onboarding time — same reason. (3) Tax compliance audits where the auditor's snapshot disagrees with your enriched data. For routine bookkeeping enrichment after the fact, the lag is fine.",
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
q: "How do I handle 429 rate-limit errors on the free tiers?",
|
|
336
|
+
a: "Two patterns. (1) Exponential backoff with Retry-After header respected. (2) Failover to a different source — BrasilAPI ↔ CNPJá open ↔ CNPJ.ws publica are roughly interchangeable for the basic CNAE + Simples + address fields. Code your enrichment loop to try BrasilAPI first, fall through to CNPJá open on 429, fall through to CNPJ.ws publica with a 20-second wait.",
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
q: "Does this work alongside auxiliar-nfs-e + Surya for a full bookkeeping pipeline?",
|
|
340
|
+
a: "Yes — that's the explicit composition. Pipeline: (1) Surya OCRs the NFS-e PDF to text. (2) auxiliar-nfs-e parses prestador + tomador + valor + ISS + CNPJs. (3) The CNPJs get enriched via BrasilAPI for CNAE + regime tributário. (4) The enriched record gets handed to your accountant or written to a ledger. The renatoag wedge validation on 2026-04-27 surfaced this /solve/ task as the missing step (3).",
|
|
341
|
+
},
|
|
342
|
+
],
|
|
343
|
+
methodological_caveats: [
|
|
344
|
+
"This is documented-characteristics ranking, not field-accuracy ranking. Numbers from vendor docs and curl tests against well-known CNPJs, not a real-corpus accuracy eval. A field-accuracy corpus run is Phase-2 follow-up tracked in backlog.md.",
|
|
345
|
+
"Free-tier vendor terms can change without notice. Re-check rate limits + auth requirements before relying on any source for critical workflows. last_verified: 2026-04-27.",
|
|
346
|
+
"Data freshness varies. BrasilAPI / CNPJ.ws publica / CNPJá open are cached from open data dumps with cadence ranging from daily (CNPJá) to ~30 days (BrasilAPI / CNPJ.ws). For situações cadastrais needing real-time, only paid tiers apply.",
|
|
347
|
+
"Inscrições Estaduais lag varies by state. CNPJ.ws sources from Sintegra which has per-state reporting cadence — some states report daily, others lag.",
|
|
348
|
+
"No commercial-enrichment fields. None of the 5 ranked sources include Serasa-style credit signals, employee count ranges (Speedio), or revenue estimates. If those matter, use a paid commercial enrichment provider.",
|
|
349
|
+
],
|
|
350
|
+
update_cadence: "Re-run this ranking when: (a) BrasilAPI publishes a rate-limit cap or pricing tier (currently uncapped), (b) any of the 5 sources changes its free-tier shape (auth, field gating), (c) a Phase-2 field-accuracy corpus eval ships and updates the scorecard with measured numbers, (d) 90 days after first publish (2026-07-26).",
|
|
351
|
+
fit_by_agent: {
|
|
352
|
+
"claude-code": { "brasilapi-cnpj": true, "cnpja-cnpj": true, "cnpj-ws": true, "receitaws-cnpj": true, "mcp-gov-cnpj-fetch": true },
|
|
353
|
+
"claude-desktop": { "brasilapi-cnpj": true, "cnpja-cnpj": true, "cnpj-ws": true, "receitaws-cnpj": true, "mcp-gov-cnpj-fetch": true },
|
|
354
|
+
cursor: { "brasilapi-cnpj": true, "cnpja-cnpj": true, "cnpj-ws": true, "receitaws-cnpj": true, "mcp-gov-cnpj-fetch": true },
|
|
355
|
+
openclaw: { "brasilapi-cnpj": true, "cnpja-cnpj": true, "cnpj-ws": true, "receitaws-cnpj": true, "mcp-gov-cnpj-fetch": true },
|
|
356
|
+
},
|
|
357
|
+
},
|
|
234
358
|
};
|
package/dist/server.js
CHANGED
|
@@ -13,9 +13,10 @@ import { findCapability } from "./tools/find-capability.js";
|
|
|
13
13
|
import { getCapability } from "./tools/get-capability.js";
|
|
14
14
|
import { listCapabilities } from "./tools/list-capabilities.js";
|
|
15
15
|
import { compareCapabilities } from "./tools/compare-capabilities.js";
|
|
16
|
+
import { invokeCapability } from "./tools/invoke-capability.js";
|
|
16
17
|
const server = new McpServer({
|
|
17
18
|
name: "auxiliar",
|
|
18
|
-
version: "0.
|
|
19
|
+
version: "0.12.0",
|
|
19
20
|
});
|
|
20
21
|
// Tool: recommend_service
|
|
21
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).", {
|
|
@@ -158,6 +159,22 @@ server.tool("compare_capabilities", "Side-by-side comparison structure for 2-5 C
|
|
|
158
159
|
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
159
160
|
};
|
|
160
161
|
});
|
|
162
|
+
// Tool: invoke_capability
|
|
163
|
+
//
|
|
164
|
+
// Phase 3 of the mcp-gov merge. The Capability index has long described
|
|
165
|
+
// "what each tool does"; invoke_capability is the channel for *calling*
|
|
166
|
+
// them. Routes to api.auxiliar.ai/api/invoke/<slug> where each slug is
|
|
167
|
+
// a Python coroutine in backend/sources/<region>/. Returns the standard
|
|
168
|
+
// envelope {tool, source_module, elapsed_ms, result}.
|
|
169
|
+
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}. Caching, rate limits, and retries are handled server-side.", {
|
|
170
|
+
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."),
|
|
171
|
+
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."),
|
|
172
|
+
}, async (params) => {
|
|
173
|
+
const result = await invokeCapability(params);
|
|
174
|
+
return {
|
|
175
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
176
|
+
};
|
|
177
|
+
});
|
|
161
178
|
async function main() {
|
|
162
179
|
const transport = new StdioServerTransport();
|
|
163
180
|
await server.connect(transport);
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* invoke_capability — execute a registered data-plane tool over HTTP.
|
|
3
|
+
*
|
|
4
|
+
* Phase 3 of the mcp-gov merge. Routes to api.auxiliar.ai/api/invoke/<slug>
|
|
5
|
+
* where each <slug> corresponds to a Python coroutine in
|
|
6
|
+
* backend/sources/<region>/. Returns the standard envelope:
|
|
7
|
+
*
|
|
8
|
+
* { tool, source_module, elapsed_ms, result }
|
|
9
|
+
*
|
|
10
|
+
* Caching, rate limiting, and retries already happen server-side inside
|
|
11
|
+
* each source module — this client is intentionally thin.
|
|
12
|
+
*
|
|
13
|
+
* Env knobs:
|
|
14
|
+
* - AUXILIAR_GATEWAY_URL override base URL (default: api.auxiliar.ai)
|
|
15
|
+
* - AUXILIAR_GATEWAY_KEY sent as x-auxiliar-key header when set
|
|
16
|
+
* - AUXILIAR_GATEWAY_TIMEOUT_MS per-request timeout (default 60s,
|
|
17
|
+
* matching the longest budgeted source)
|
|
18
|
+
*/
|
|
19
|
+
export interface InvokeCapabilityParams {
|
|
20
|
+
tool: string;
|
|
21
|
+
args?: Record<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
export interface InvokeEnvelope {
|
|
24
|
+
tool: string;
|
|
25
|
+
source_module: string | null;
|
|
26
|
+
elapsed_ms: number;
|
|
27
|
+
result: unknown;
|
|
28
|
+
}
|
|
29
|
+
export interface InvokeError {
|
|
30
|
+
error: string;
|
|
31
|
+
status?: number;
|
|
32
|
+
detail?: string;
|
|
33
|
+
}
|
|
34
|
+
export declare function invokeCapability(params: InvokeCapabilityParams): Promise<InvokeEnvelope | InvokeError>;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* invoke_capability — execute a registered data-plane tool over HTTP.
|
|
3
|
+
*
|
|
4
|
+
* Phase 3 of the mcp-gov merge. Routes to api.auxiliar.ai/api/invoke/<slug>
|
|
5
|
+
* where each <slug> corresponds to a Python coroutine in
|
|
6
|
+
* backend/sources/<region>/. Returns the standard envelope:
|
|
7
|
+
*
|
|
8
|
+
* { tool, source_module, elapsed_ms, result }
|
|
9
|
+
*
|
|
10
|
+
* Caching, rate limiting, and retries already happen server-side inside
|
|
11
|
+
* each source module — this client is intentionally thin.
|
|
12
|
+
*
|
|
13
|
+
* Env knobs:
|
|
14
|
+
* - AUXILIAR_GATEWAY_URL override base URL (default: api.auxiliar.ai)
|
|
15
|
+
* - AUXILIAR_GATEWAY_KEY sent as x-auxiliar-key header when set
|
|
16
|
+
* - AUXILIAR_GATEWAY_TIMEOUT_MS per-request timeout (default 60s,
|
|
17
|
+
* matching the longest budgeted source)
|
|
18
|
+
*/
|
|
19
|
+
const DEFAULT_BASE_URL = "https://api.auxiliar.ai";
|
|
20
|
+
const DEFAULT_TIMEOUT_MS = 60_000;
|
|
21
|
+
function gatewayBaseUrl() {
|
|
22
|
+
return process.env.AUXILIAR_GATEWAY_URL || DEFAULT_BASE_URL;
|
|
23
|
+
}
|
|
24
|
+
function gatewayTimeoutMs() {
|
|
25
|
+
const raw = process.env.AUXILIAR_GATEWAY_TIMEOUT_MS;
|
|
26
|
+
if (!raw)
|
|
27
|
+
return DEFAULT_TIMEOUT_MS;
|
|
28
|
+
const n = parseInt(raw, 10);
|
|
29
|
+
return Number.isFinite(n) && n > 0 ? n : DEFAULT_TIMEOUT_MS;
|
|
30
|
+
}
|
|
31
|
+
export async function invokeCapability(params) {
|
|
32
|
+
const tool = String(params.tool || "").trim();
|
|
33
|
+
if (!tool) {
|
|
34
|
+
return { error: "tool slug is required" };
|
|
35
|
+
}
|
|
36
|
+
// Slug format must match the gateway registry — Python identifiers,
|
|
37
|
+
// no path separators or punctuation. Reject early so the user gets
|
|
38
|
+
// a clear local error rather than a 404 from the server.
|
|
39
|
+
if (!/^[a-z][a-z0-9_]*$/.test(tool)) {
|
|
40
|
+
return {
|
|
41
|
+
error: `invalid tool slug: ${tool}. Must match [a-z][a-z0-9_]*`,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
const url = `${gatewayBaseUrl()}/api/invoke/${tool}`;
|
|
45
|
+
const headers = {
|
|
46
|
+
"content-type": "application/json",
|
|
47
|
+
"user-agent": "auxiliar-mcp/0.12",
|
|
48
|
+
};
|
|
49
|
+
const apiKey = process.env.AUXILIAR_GATEWAY_KEY;
|
|
50
|
+
if (apiKey) {
|
|
51
|
+
headers["x-auxiliar-key"] = apiKey;
|
|
52
|
+
}
|
|
53
|
+
const controller = new AbortController();
|
|
54
|
+
const timeoutId = setTimeout(() => controller.abort(), gatewayTimeoutMs());
|
|
55
|
+
try {
|
|
56
|
+
const response = await fetch(url, {
|
|
57
|
+
method: "POST",
|
|
58
|
+
headers,
|
|
59
|
+
body: JSON.stringify(params.args || {}),
|
|
60
|
+
signal: controller.signal,
|
|
61
|
+
});
|
|
62
|
+
const text = await response.text();
|
|
63
|
+
let parsed;
|
|
64
|
+
try {
|
|
65
|
+
parsed = text ? JSON.parse(text) : null;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
parsed = null;
|
|
69
|
+
}
|
|
70
|
+
if (!response.ok) {
|
|
71
|
+
return {
|
|
72
|
+
error: `gateway returned ${response.status}`,
|
|
73
|
+
status: response.status,
|
|
74
|
+
detail: parsed?.detail ??
|
|
75
|
+
text.slice(0, 500),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
return parsed;
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
const reason = err instanceof Error
|
|
82
|
+
? err.name === "AbortError"
|
|
83
|
+
? `request timed out after ${gatewayTimeoutMs()}ms`
|
|
84
|
+
: err.message
|
|
85
|
+
: String(err);
|
|
86
|
+
return { error: `gateway request failed: ${reason}` };
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
clearTimeout(timeoutId);
|
|
90
|
+
}
|
|
91
|
+
}
|
package/dist/tools/solve.js
CHANGED
|
@@ -30,6 +30,24 @@ const taskAliases = {
|
|
|
30
30
|
"brazilian-invoice": "nfs-e-extraction",
|
|
31
31
|
"brazilian-nfs-e": "nfs-e-extraction",
|
|
32
32
|
"cnpj-invoice": "nfs-e-extraction",
|
|
33
|
+
// CNPJ enrichment task — public-data lookup ranker (renatoag wedge follow-up)
|
|
34
|
+
"cnpj": "cnpj-enrichment-mcp",
|
|
35
|
+
"cnpj-lookup": "cnpj-enrichment-mcp",
|
|
36
|
+
"cnpj-enrichment": "cnpj-enrichment-mcp",
|
|
37
|
+
"cnpj-api": "cnpj-enrichment-mcp",
|
|
38
|
+
"brasilapi": "cnpj-enrichment-mcp",
|
|
39
|
+
"receitaws": "cnpj-enrichment-mcp",
|
|
40
|
+
"cnpja": "cnpj-enrichment-mcp",
|
|
41
|
+
"cnpj-ws": "cnpj-enrichment-mcp",
|
|
42
|
+
"cnae": "cnpj-enrichment-mcp",
|
|
43
|
+
"cnae-lookup": "cnpj-enrichment-mcp",
|
|
44
|
+
"regime-tributario": "cnpj-enrichment-mcp",
|
|
45
|
+
"simples-nacional": "cnpj-enrichment-mcp",
|
|
46
|
+
"razao-social": "cnpj-enrichment-mcp",
|
|
47
|
+
"supplier-enrichment": "cnpj-enrichment-mcp",
|
|
48
|
+
"supplier-registry": "cnpj-enrichment-mcp",
|
|
49
|
+
"company-lookup-brazil": "cnpj-enrichment-mcp",
|
|
50
|
+
"bookkeeping-cnpj": "cnpj-enrichment-mcp",
|
|
33
51
|
};
|
|
34
52
|
function resolveSlug(raw) {
|
|
35
53
|
const lower = raw.toLowerCase().trim();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "auxiliar-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "Unified Capability index for AI agents — 80+ ranked cloud services, skills, MCP servers, plugins, parsers, and public-data sources for Claude Code, Cursor, Claude Desktop, OpenClaw. Call find_capability with a query or jtbd tag to get a ranked list across every kind of agent-installable thing. Also: get_capability, list_capabilities, compare_capabilities. Legacy tools (recommend_service, solve_task, list_services, list_solve_tasks, get_pricing, get_risks, setup_service, check_compatibility) remain wired for backward compatibility.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/server.js",
|