Dual-Protocol Model
Ferrule exposes every integration over both MCP and REST. Learn when to use each.
Dual-Protocol Model
Ferrule exposes every connected integration over two protocols simultaneously: MCP for AI assistant integration and REST for programmatic access. Both protocols share the same authentication, the same underlying tool registry, and the same token management.
When to use MCP
Use MCP when you are connecting an AI assistant (Claude, ChatGPT, Cursor, or any other MCP-compatible client).
- The AI assistant discovers available tools automatically.
- Tool descriptions and parameter schemas are provided to the model at runtime.
- The model decides which tools to call and constructs the arguments.
- Ideal for conversational workflows: "Find all open matters for client Smith and summarize the outstanding invoices."
When to use REST
Use REST when you are writing code that calls Ferrule directly — scripts, automation pipelines, webhooks, or backend services.
- You construct HTTP requests yourself.
- You get plain JSON responses.
- Full control over request timing, retries, and error handling.
- Ideal for scheduled jobs, data exports, and custom integrations.
Protocol comparison
| MCP | REST | |
|---|---|---|
| Request format | JSON-RPC 2.0 (tools/call) | HTTP verbs (GET, POST, PATCH, DELETE) |
| Auth | Bearer API key | Bearer API key |
| Tool discovery | Automatic (tools/list) | Via OpenAPI spec |
| Who decides what to call | The AI model | Your code |
| Primary use case | AI assistants | Scripts & automation |
| Endpoint | POST /api/mcp | `GET |
Protocol toggles
For each connected integration, you can independently enable or disable MCP and REST access from Dashboard → Integrations → Configure.
By default, MCP is enabled and REST is disabled for new integrations. Enable REST only if you have a specific need for programmatic access — this reduces the attack surface if an API key is ever compromised.
OpenAPI specs
Every integration that supports REST exposes a generated OpenAPI 3.1 spec:
GET https://app.ferrule.io/api/v1/{"{service}"}/openapi.json
Use this spec to generate a typed client in any language, explore available endpoints in Swagger UI, or set up automated contract testing.