MCP Servers

Overview

Poke supports Model Context Protocol (MCP) servers, allowing you to extend Poke with custom tools and data sources. When you connect an MCP server, Poke can discover and call the tools it exposes during conversations.

Connecting an MCP Server

You can connect an MCP server to Poke in three ways:

Via the Web App

Go to Integrations

Enter Server Details

Provide a Name and the MCP Server URL (e.g., https://mcp.example.com/sse). Add an API Key if required.

Create

Click Create Integration. Poke will connect and discover available tools.

Via the CLI

# Remote MCP server
npx poke@latest mcp add https://mcp.example.com/sse -n "My Server"
 
# With API key authentication
npx poke@latest mcp add https://mcp.example.com/sse -n "My Server" -k "sk-your-api-key"
 
# Local server via tunnel
npx poke@latest tunnel http://localhost:3000/mcp -n "Local Dev MCP"
 
# Tunnel with OAuth client credentials (for servers without DCR)
npx poke@latest tunnel http://localhost:3000/mcp -n "My OAuth Server" --client-id "your-id" --client-secret "your-secret"

The tunnel forwards your local port so Poke can reach it. Start your MCP server first, then run the tunnel command. The tunnel stays active until you press Ctrl+C.

OAuth Servers Without Dynamic Client Registration

If your MCP server requires OAuth but does not support Dynamic Client Registration (DCR), you can provide the client ID and secret in two ways:

Via the CLI: pass --client-id and --client-secret to the tunnel command (see above).

Via Kitchen: for hosted servers that don't need a tunnel:

Create a Template

Go to poke.com/kitchen and click New Template. Enter the MCP server URL along with the OAuth Client ID and Client Secret.

Create a Recipe

Create a recipe that includes the template you just set up as a required integration.

Add the Integration

Install the integration through the recipe. Poke will handle the OAuth flow for each user who connects.

MCP servers that support Dynamic Client Registration (DCR) work automatically. Just add them via the web app or CLI. The flows above are only needed for OAuth servers that do not support DCR.

What Poke Sends to Your Server

When Poke makes requests to your MCP server, it includes the following:

Authentication

If you configured an API key or OAuth credentials, Poke includes an Authorization header on every request.

Authorization: Bearer {access_token}

User Identification

Poke includes an X-Poke-User-Id header on every request. This is a unique identifier for the Poke user making the request.

X-Poke-User-Id: 00000000-0000-0000-0000-000000000000

You can use this header for:

  • Per-user rate limiting
  • User-scoped data access: return different results depending on which user is asking
  • Audit logging: track which user triggered each request

Example Request

POST /mcp HTTP/1.1
Host: mcp.example.com
Authorization: Bearer {access_token}
X-Poke-User-Id: 00000000-0000-0000-0000-000000000000
Content-Type: application/json

Building an MCP Server

Any server implementing the MCP specification works with Poke. Popular frameworks include:

Your server exposes tools that Poke can discover and call. Each tool has a name, description, and input schema that Poke uses to decide when and how to invoke it.

You can re-sync your server's tool list at any time from the integrations page or by calling the sync endpoint. Poke also syncs tools automatically when a connection is first created or re-authenticated.