Back to Blog
AI & Agents8 min read

A public MCP server for a boutique consultancy — we built it, here's the anatomy

V

Vahram Manukyan

July 29, 2026

Why a consultancy needs an MCP endpoint

When a CFO asks an AI assistant "who can implement Oracle Fusion localization for Argentina?", the assistant answers from whatever it can read — and cite. A website is readable; an MCP server is callable. We built a public, read-only MCP endpoint so that agents don't have to scrape our marketing pages: they can call twelve tools and get structured answers with a citation attached to every record.

The endpoint is live at https://ancapit.com/mcp/ — streamable HTTP, no auth, rate-limited at 60 requests/minute per IP.

The anatomy

Transport. A Cloudflare Worker speaking the Streamable HTTP transport in stateless JSON mode: POST a JSON-RPC request, get a JSON response. No sessions, no SSE, no auth — the content is public anyway; the transport should be as boring as possible.

Twelve tools. list_services, get_service, list_case_studies, get_case_study, check_country_coverage, get_localization_scope, list_certifications, list_partnerships, get_team_capacity, list_blog_notes, get_contact_options, and search. One file per tool, one strict JSON Schema per tool — additionalProperties: false everywhere, enums where the domain is closed (get_localization_scope only accepts AR or BR).

The source_url rule. Every record in every response carries source_url — the marketing page the data comes from — and updated_at. This is the single most important design decision: it turns a tool result into something an LLM can cite, and a citation into traffic. If your MCP responses can't be cited, agents will paraphrase you without linking you.

Pagination caps. List tools cap output at 50 items and expose limit/cursor. An agent that wants everything can page; an agent that grabs defaults can't blow up its own context window on our account.

No SSRF surface. No tool ever fetches a URL supplied by the caller. All content is bundled into the Worker at build time from versioned JSON files. A public endpoint with no auth must have nothing to steal and nothing to pivot through.

Discovery. The site advertises the server three ways: a link rel="mcp" tag in the head of every page, a SEP-1960-style manifest at https://ancapit.com/.well-known/mcp, and a server card at https://ancapit.com/.well-known/mcp/server-card.json. Plus llms.txt, for agents that read before they call.

Try it — live

List the tools:

curl -sX POST https://ancapit.com/mcp/ -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Ask what we implement for Argentina:

curl -sX POST https://ancapit.com/mcp/ -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_localization_scope","arguments":{"country":"AR"}}}'

The answer lists the regulations (AFIP-CAE via Gosocket, IIBB with the Multilateral Agreement, Padrones, legal reports, banking) — and, deliberately, the gaps. The statutory inflation adjustment gap ships in the API response with the same prominence it has on the landing page. If an agent is doing due diligence on us, it should find the honest version.

What we'd tell another boutique

  • Read-only, no auth, aggressive caps. The value is legibility, not interactivity.
  • source_url on every record, or don't bother.
  • Keep the content pipeline dumb: JSON files in git, redeploy on change. A CMS is overkill for a dataset this size.
  • Put the gaps in. An agent that catches you overselling will remember it in its context window longer than any prospect would.
  • References

  • MCP specification — Streamable HTTP transport.
  • Our server card: https://ancapit.com/.well-known/mcp/server-card.json
  • The AI & Agents practice page: https://ancapit.com/en/ai-agents/