Claude HTTP Tools for Brazil CVM Filings
Builders looking for Claude tools CVM filings access can wire Anthropic tool use to apicvm over HTTP. apicvm does not ship an official Claude plugin or MCP server — you define tools that call /v1/companies/resolve, /v1/documents, and file download.
The problem
Claude needs structured tools to fetch regulated Brazilian filings. Generic web fetch hits portals and CAPTCHAs. You want deterministic JSON:
resolve(ticker) → list(type, year) → choose id → download or extract
Tool surface (recommended)
| Tool | apicvm endpoint |
|---|---|
resolve_company |
GET /v1/companies/resolve |
list_documents |
GET /v1/documents |
get_document |
GET /v1/documents/:id |
download_filing |
GET /v1/documents/:id/file |
enqueue_extraction |
POST /v1/document-text-extractions (Pro) |
Example: list FRE for EMBR3
export APICVM_KEY='apicvm_...'
export APICVM_URL='https://apicvm.dev'
curl -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/companies/resolve?query=EMBR3&by=ticker"
curl -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents?ticker=EMBR3&type=FRE&year=2024&perPage=15"
import os, requests
BASE = os.environ["APICVM_URL"].rstrip("/")
H = {"Authorization": f"Bearer {os.environ['APICVM_KEY']}"}
def list_documents(ticker: str, doc_type: str, year: int, name: str | None = None):
params = {"ticker": ticker, "type": doc_type, "year": year, "perPage": 15}
if name:
params["name"] = name
r = requests.get(f"{BASE}/v1/documents", headers=H, params=params, timeout=30)
r.raise_for_status()
return r.json()
# Tool handler body for Claude tool_use
print(list_documents("EMBR3", "FRE", 2024, name="Risco"))
Instruct the model to pick an explicit document.id — the API never auto-selects a filing.
Desktop / agent hosts
Whether you use Claude Desktop custom tools, the Messages API with tools, or an orchestration layer:
- Keep
APICVM_KEYon the host, not in the system prompt. - Return compact JSON (first N documents) to save context.
- Map
409 AMBIGUOUS_RESULTto a disambiguation message withcandidates. - Treat extraction as a background job — callbacks are the only progress channel in v1.
For a parallel pattern with OpenAI, see OpenAI tools for CVM filings. For LangChain, see LangChain tools.
Demo without a key (VALE3 only)
Public demo routes exist for Vale risk-factor markdown:
curl "https://apicvm.dev/v1/demo/documents?ticker=VALE3&type=FRE&year=2025&name=DescricaoFatoresRisco&perPage=5"
Scope is narrow (VALE3 / specific FRE 2025 section). Full tickers need an API key. Guide: try the demo API.
What this is not
- Not an official apicvm MCP — third-party MCP projects that read CVM open-data CSVs are a different stack.
- Not synchronous full-text — authenticated extraction is async + credits.
- Not market data — filings only.
Current limitations
- Corpus gaps and ingestion lag.
perPagemax 50; paginate for large catalogs.- HTTPS callback URL required in production for extractions.
Next steps
Ready to integrate?
Get an API key and start querying Brazilian CVM filings programmatically.