Ferrule
Concepts

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

MCPREST
Request formatJSON-RPC 2.0 (tools/call)HTTP verbs (GET, POST, PATCH, DELETE)
AuthBearer API keyBearer API key
Tool discoveryAutomatic (tools/list)Via OpenAPI spec
Who decides what to callThe AI modelYour code
Primary use caseAI assistantsScripts & automation
EndpointPOST /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.

On this page