Remote MCP Server on Cloudflare
# Remote MCP Server on Cloudflare
Let's get a remote MCP server up-and-running on Cloudflare Workers complete with OAuth login!
## Develop locally
```bash
# clone the repository
git clone git@github.com:cloudflare/ai.git
# install dependencies
cd ai
npm install
# run locally
npx nx dev remote-mcp-server-bearer-auth
```
You should be able to open [`http://localhost:8787/`](http://localhost:8787/) in your browser
## Connect the MCP inspector to your server
To explore your new MCP api, you can use the [MCP Inspector](https://modelcontextprotocol.io/docs/tools/inspector).
- Start it with `npx @modelcontextprotocol/inspector`
- [Within the inspector](http://localhost:5173), switch the Transport Type to `SSE` and enter `http://localhost:8787/sse` as the URL of the MCP server to connect to.
- Add a bearer token and click "Connect"
- Click "List Tools"
- Run the "getToken" tool, which should return the Authorization header that you set in the inspector
<div align="center">
<img src="img/mcp-inspector-sse-config.png" alt="MCP Inspector with the above config" width="600"/>
</div>
<div align="center">
<img src="img/mcp-inspector-successful-tool-call.png" alt="MCP Inspector with after a tool call" width="600"/>
</div>
## Connect Claude Desktop to your local MCP server
```json
{
"mcpServers": {
"remote-mcp-server-bearer-auth": {
"command": "npx",
"args": [
"mcp-remote",
"http://localhost:8787/sse",
"--header",
"Authorization: Bearer ${AUTH_TOKEN}"
]
},
"env": {
"AUTH_TOKEN": "..."
}
}
}
```
## Deploy to Cloudflare
`npm run deploy`
## Call your newly deployed remote MCP server from a remote MCP client
Just like you did above in "Develop locally", run the MCP inspector:
`npx @modelcontextprotocol/inspector@latest`
Then enter the `workers.dev` URL (ex: `worker-name.account-name.workers.dev/sse`) of your Worker in the inspector as the URL of the MCP server to connect to, and click "Connect".
You've now connected to your MCP server from a remote MCP client. You can pass in a bearer token like mentioned above
## Debugging
Should anything go wrong it can be helpful to restart Claude, or to try connecting directly to your
MCP server on the command line with the following command.
```bash
npx mcp-remote http://localhost:8787/sse
```
In some rare cases it may help to clear the files added to `~/.mcp-auth`
```bash
rm -rf ~/.mcp-auth
```
TDQS
Scored across 1 tool
With only one tool, there is no possibility of ambiguity or overlap between tools. The tool's purpose is clearly defined and distinct by default.
A single tool inherently has consistent naming, as there are no other tools to compare it against. The name 'get_list_tweets' follows a clear verb_noun pattern.
One tool is generally too few for a server's purpose, as it limits functionality and suggests an incomplete or narrow scope. This is borderline inadequate for typical MCP server operations.
Inferring the domain as Twitter list management, the tool surface is severely incomplete. It only allows getting tweets from a list, with no capabilities for creating, updating, deleting lists, or interacting with tweets beyond retrieval, leading to significant gaps.