# Rootstrap MCP server

A public [Model Context Protocol](https://modelcontextprotocol.io) server for rootstrap.com. It gives AI assistants and agents structured access to what Rootstrap publishes, and one action to start a conversation with the team.

- **Endpoint:** `https://www.rootstrap.com/api/mcp`
- **Transport:** Streamable HTTP, stateless (JSON-RPC 2.0 over POST, JSON responses, no sessions)
- **Authentication:** none
- **Server card:** https://www.rootstrap.com/.well-known/mcp/server-card.json
- **API catalog (RFC 9727):** https://www.rootstrap.com/.well-known/api-catalog
- **Health:** https://www.rootstrap.com/api/health
- **OpenAPI:** https://www.rootstrap.com/openapi.json · **Developer page:** https://www.rootstrap.com/developers

## Connect

Claude Code:

```bash
claude mcp add --transport http rootstrap https://www.rootstrap.com/api/mcp
```

Generic client config:

```json
{ "mcpServers": { "rootstrap": { "type": "http", "url": "https://www.rootstrap.com/api/mcp" } } }
```

Raw JSON-RPC:

```bash
curl -s https://www.rootstrap.com/api/mcp \
  -H 'Content-Type: application/json' -H 'Accept: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
```

## Tools

| Tool | Kind | What it returns |
|---|---|---|
| `get_company_profile` (`format`: short, full) | read | The llms.txt or llms-full.txt profile as Markdown. Read this first. |
| `get_page_markdown` (`path`) | read | Any rootstrap.com page as clean Markdown, e.g. `/how-we-work`, `/work/masterclass`. |
| `list_case_studies` (`industry?`, `limit?`) | read | Client, industry, summary, services and URL for each published case study. |
| `list_insights` (`tag?`, `limit?`) | read | Recent articles with date, summary, tags and URL. |
| `search_site` (`query`, `limit?`) | read | Keyword search across pages, case studies and insights. |
| `start_conversation` (`name`, `email`, `company?`, `message`) | action | Files a contact request; a principal engineer follows up by email. Use only with the person's explicit consent. |

All read tools return public content. `start_conversation` writes a lead into the same pipeline as the website's contact form (HubSpot + an internal alert), tagged as coming from MCP.

## Example

```json
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search_site","arguments":{"query":"Ground Truth agents production","limit":5}}}
```

## Rate limits

120 requests per 60 seconds per client IP. Responses carry `RateLimit-Policy`, `RateLimit-Limit`, `RateLimit-Remaining`, `RateLimit-Reset`. Over the limit you may see either `429` (JSON error, `Retry-After`) from the server or `403` with `x-vercel-mitigated: deny` from the edge firewall; both mean wait for the window to roll over.

## Notes for agents

- `initialize` negotiates the protocol version; supported: 2025-11-25, 2025-06-18, 2025-03-26.
- `GET /api/mcp` returns 405: there is no server-initiated stream. `notifications/*` return 202.
- Responses carry `MCP-Protocol-Version` and permissive CORS so browser-based clients can connect.
- The same content is also available without MCP: any page with `Accept: text/markdown`, plus `/llms.txt`, `/llms-full.txt`, and `/.well-known/ai-catalog.json`.
- Discovery: `Link` headers on every response, `/.well-known/api-catalog`, `/.well-known/agent-skills/index.json`, and DNS (`_index._agents.rootstrap.com`, SVCB).
