---
title: MCP server
url: https://www.tines.com/docs/actions/templates/mcp-server/
updated: 2026-06-16T08:13:50+00:00
---

*[tines.com](https://www.tines.com/llms.txt) › [Docs](https://www.tines.com/llms.txt) › [Actions](https://www.tines.com/llm/docs/actions.md) › [Templates](https://www.tines.com/llm/docs/actions/templates.md)*

# MCP server

*[View on tines.com](https://www.tines.com/docs/actions/templates/mcp-server/)*

[Model Context Protocol](https://modelcontextprotocol.io/about) (MCP) is a standard protocol for LLMs to connect to external services and interact with them. You can build custom remote MCP servers directly from the Tines storyboard.

To get started, search for "MCP" in the Templates section on the left panel, and drag your first MCP server to the storyboard. After configuring it with some tools, you can reference the server URL and authentication parameters from your MCP client to try it out.

### **Adding tools**

MCP servers support template, send-to-story and custom tools. They can can be configured in the [same way as the AI Agent action.](https://www.tines.com/docs/actions/types/ai-agent/) They will be exposed directly via the server and available for invocation from your client. Tool names, descriptions and arguments are automatically available on your MCP client after successful connection. 

### Access control

There are four access control modes for MCP servers:

- Anyone with the path (public)
- Anyone with the secret (passed in via the URL or HTTP Authorization)
- With a [Tines API Key](https://www.tines.com/api/authentication/)
  
  - Members of specified teams
  - Any member of the Tines tenant
- With OAuth
  
  - Members of specified teams
  - Any member of the Tines tenant

You can read more about these [here](/docs/actions/types/webhook/#authentication).

### Configuring your MCP client

An MCP server created in Tines can be used directly by any client that supports the Streamable HTTP protocol for remote MCP servers. Typically, you can use an MCP setting like this on a client that supports this syntax.

```json
{
  "mcpServers": {
    "tines": {
      "url": "https://<tenant>.tines.com/mcp/<mcp-path>",
      "headers": {
        "Authorization": "Bearer <webhook-secret or api-key>"
      }
    }
  }
}
```

Additionally, if you are using a client that only support local servers (stdio), you can use [mcp-remote](https://www.npmjs.com/package/mcp-remote) to act as a local proxy. To do this, you need [Node.js](https://nodejs.org/en/download) installed locally and the following MCP settings:

```json
{
  "mcpServers": {
    "tines": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://<tenant>.tines.com/mcp/<mcp-path>",
        "--header",
        "Authorization:${AUTH_HEADER}",
        "--transport",
        "http-only"
      ],
      "env": {
        "AUTH_HEADER": "Basic <webhook-secret or api-key>"
      }
    }
  }
}
```

> **TIP:** You can test your MCP server using the [MCP inspector](https://modelcontextprotocol.io/legacy/tools/inspector). To do this, run npx@modelcontextprotocol/inspector in your terminal. Then, in the browser, set the server URL and configure it for "API Token Authentication".

### Protocol details

- Only Streamable HTTP is supported (no SSE or stdio). See above for information about using a `mcp-remote` as an adaptor
- Authentication can be done via the HTTP `Authorization` header or via the URL (when using secrets)
- The supported MCP protocol version is`2025-06-18` 
  
  - Version `2025-03-26` has partial support, and should work on the majority of clients that support it.
  - Version `2024-11-05` is not supported
- Only tools are supported. Tool responses are always text.

##### Unsupported features

- Prompts
- Resources
- OAuth
- Notifications
- Sessions
- Pagination
- JSON-RPC Batching (only relevant for spec `2025-03-26`)

### Limits

The MCP server implementation is subject to the same [limits that apply to response-enabled webhooks](https://www.tines.com/docs/actions/types/webhook/#response-enabled-webhooks). That is:

- Tool response time cannot exceed 30 seconds.
  
  - After this time your client will receive a timeout error.
  - When this happens, the tool can continue to run in the background, but the result does not reach the client.
- You cannot have more than 100 (1000 in dedicated tenants) concurrent tool/call requests.
  
  - These are counted globally across all MCP servers and response-enabled webhooks in your tenant.
- Tool execution happens asynchronously and is subject to the same [fair orchestration system](https://explained.tines.com/en/articles/9887588-what-is-action-run-orchestration) that applies to all stories.

### Emitted events

The MCP server will emit events for the requests it gets. These are:

- `initialize`
- `tools/list`
- `tools/call`

In the case of the `tools/call` emitted event, the tool result is not included in the event. However, each tool call will be available on the tool itself, which emits an event upon completion.

To avoid unnecessary noise, methods that do not provide meaningful information (such as `notifications` or `ping`) will not result in downstream events.

When a request is authenticated with a Tines API key or OAuth, the authenticated user's email is available in the emitted event at `<<headers.email>>`, and in linked tool actions at `META.headers.email`. See Request headers in tools and events for details.

### **Request headers in tools and events**

When **Include headers** is enabled on your MCP server (the default), Tines captures the incoming HTTP request headers from each MCP client request. You can use these headers in two places:

- **In downstream actions** connected to the MCP server — reference `<<headers.*>> `from the emitted event (for example, `<<headers.email>>`).
- **In tool actions** linked to the MCP server — reference `META.headers.*` in formulas (for example, `<<META.headers.email>>`).

Headers reflect the MCP request that triggered the current tool call. If a client sends custom headers in its MCP configuration, those headers are available too:

```json
{
  "mcpServers": {
    "tines": {
      "url": "https://<tenant>.tines.com/mcp/<mcp-path>",
      "headers": {
        "Authorization": "Bearer <webhook-secret or api-key>",
        "X-Department": "security"
      }
    }
  }
}
```

In a tool action, `META.headers.x_department` would return security.

**Header names**

Header names follow the same rules as [webhooks](https://www.tines.com/docs/actions/types/webhook/):

**Authenticated requests**

When a request is authenticated with a [Tines API key](https://www.tines.com/api/authentication/) or OAuth, Tines adds the authenticated user's email to the headers as email. You can reference it as:

- `<<headers.email>>` in downstream actions
- `META.headers.email` in tool formulas

For security, the Authorization header is not included in the captured headers when API key or OAuth authentication is used.

**Other available headers**

In addition to headers sent by the MCP client, Tines includes:

- **request_ip** — the client's IP address
- **request-method** — the HTTP method (typically POST)
- **content-type** — the request content type
- **date** — the date the request was received

To disable header capture entirely, turn off **Include headers** in the MCP server configuration. When disabled, neither `<<headers.*>>` nor `META.headers.*` will be available.

### Other configuration options

The description of the MCP server action will be exposed directly to clients as `instructions`, in case you wish to share general context about the MCP server with the LLM using it.

Each tool in an MCP server can include optional [annotations](https://modelcontextprotocol.io/specification/2025-11-25/schema#toolannotations) that describe its behavior to MCP clients. These hints help clients make decisions about how and when to invoke tools.

<table border="1" style="border-collapse: collapse;"><colgroup><col style="width: 31.2678%;"><col style="width: 46.4374%;"><col style="width: 22.2899%;"></colgroup><tbody><tr><th>Hint</th><th>Description</th><th>Default</th></tr><tr><td>Read only</td><td><div><div>This tool only reads data and does not modify anything. Overrides the destructive and idempotent hints.</div></div></td><td>Off</td></tr><tr><td>Destructive</td><td><div><div>This tool may permanently delete or modify data. Ignored when read only is on.</div></div></td><td>On</td></tr><tr><td>Idempotent</td><td><div><div>Calling this tool repeatedly with the same arguments has no additional effect.</div></div></td><td>Off</td></tr><tr><td>Open world</td><td><div><div>This tool may interact with external entities not described by its arguments.</div></div></td><td>On</td></tr></tbody></table>

To configure hints, expand the Tool hints section below each tool's configuration. 

![](https://www.datocms-assets.com/55802/1775148215-tool-hints.png)

MCP servers share many of the [configuration options that webhooks offer](https://www.tines.com/docs/actions/types/webhook/#configuration-options). For example, you can set these like you would on a normal webhook:

- Enable CORS
- Match rules
- Rate limiting
