# Fenceline MCP Server

AI-powered business automation for fence contractors, exposed over the Model
Context Protocol.

## Transports

| Transport | Endpoint | Use it for |
| --- | --- | --- |
| Streamable HTTP | `https://mcp.fenceline.ai/mcp` | Recommended MCP client sessions |
| HTTP JSON-RPC | `https://mcp.fenceline.ai/mcp/rpc` | Stateless compatibility requests |
| Server-Sent Events | `https://mcp.fenceline.ai/mcp/sse` | Legacy streaming sessions |

## Authentication

Discovery on `/mcp` and `/mcp/rpc` is open: `initialize`, `ping`,
`resources/list`, and `resources/read` need no credentials, because every
resource is a public document. `/mcp/sse` requires an API key when the
connection is established.

Everything that touches contractor data needs an API key. Send it as
`X-API-Key: <key>` or `Authorization: Bearer <key>`. `tools/list` returns
only the tools your key's scopes allow, and `tools/call` is denied before
dispatch when a scope is missing.

Scopes are `mcp:read`, `mcp:write`, `mcp:internal`, and `mcp:admin`.
Contractors issue and rotate keys from the Fenceline dashboard.

## Tool families

- `context.*` — 3 tools
- `materials.*` — 3 tools
- `permits.*` — 2 tools
- `rag.*` — 4 tools
- `vendors.*` — 4 tools

Read `https://mcp.fenceline.ai/mcp/tools.json` for the full catalog, including
each tool's input schema, required scope, risk class, and confirmation policy.

## Limits

Requests are rate limited per API key and per source IP. A throttled response
carries `Retry-After` alongside the `X-RateLimit-*` headers; back off rather
than retrying immediately.

## More

- Server discovery: <https://mcp.fenceline.ai/mcp/.well-known/mcp-server.json>
- OpenAPI description: <https://mcp.fenceline.ai/mcp/openapi.json>
- Human documentation: <https://mcp.fenceline.ai/mcp/docs>
- Product site: <https://fenceline.ai>
- Support: <https://fenceline.ai/support>
