Give your LLM Coding Tools Their Own Tools
Model Context Protocol (MCP) allows LLMs to call "tools" that can do anything: interact with your filesystem, search the Web, hit an external API, or even help guide the LLM through a structured problem-solving process. A single MCP server provides one or more tools; for example, a research tool might provide two tools, "search" and "read webpage."
I've found a few MCP servers to be particularly useful in LLM-assisted programming. (Claude Desktop also supports MCP, but for this post I'm focused on coding tools.)
GitHub MCP
GitHub's official MCP server is incredibly helpful. It allows your coding LLM to access files from GitHub repositories, manage issues, examine releases, check on GitHub Actions workflows, and more. Some tasks I can ask Claude Code et al. to do with the assistance of this MCP:
- Update all GitHub Actions in a workflow to their latest major release
- Figure out why CI failed, fix it, push the fix, and verify that CI is happy
- Build a software release flow that builds the software and pushes it to my Debian and Homebrew repos, based on an existing repo
I probably need to write a whole separate post or two focusing exclusively on what I've gotten done with this MCP server.
Claude JSON for GitHub MCP
"github": {
"type": "http",
"url": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "Bearer ghp_mygithubtokenhere"
}
},
Opencode JSON for GitHub MCP
"github": {
"type": "remote",
"url": "https://api.githubcopilot.com/mcp/",
"enabled": true,
"headers": {
"Authorization": "Bearer ghp_mygithubtokenhere"
}
}
Web Research Tools
Motivation
Claude Code has built-in web search and fetch tools. But the web search tool (in particular) doesn't work if you're using an alternative model. (I'm not sure how Opencode handles web search natively.)
So, I want to provide alternate paths for searching & retrieving information, that will work with any model. Right now I have two solutions set up.
SearXNG
SearXNG is an open-source "Internet metasearch engine" that you can self-host. I'm self-hosting an instance now, intended for use exclusively by my own AI tooling.
I've contributed substantial improvements to this SearXNG MCP server, and I use & recommend it. It allows Claude to run SearXNG searches and fetch page contents, and it helps conserve context by allowing Claude to ask only for the relevant sections of web pages.
Claude JSON for SearXNG MCP
"searxng": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"mcp-searxng"
],
"env": {
"SEARXNG_URL": "https://myhost.tailnet-me.ts.net:8888"
}
},
Opencode JSON for SearXNG MCP
"searxng": {
"type": "local",
"command": ["npx", "-y", "mcp-searxng"],
"enabled": true,
"environment": {
"SEARXNG_URL": "https://myhost.tailnet-me.ts.net:8888"
}
},
Self-hosting Setup
Setting up SearXNG was surprisingly easy. A full guide is out of scope for this post, but I'm using the following docker-compose.yml
:
services:
valkey:
container_name: valkey
image: docker.io/valkey/valkey:8-alpine
command: valkey-server --save 30 1 --loglevel warning
restart: unless-stopped
volumes:
- search-valkey-data:/data
searxng:
container_name: searxng
image: docker.io/searxng/searxng:latest
restart: unless-stopped
ports:
- "127.0.0.1:8088:8080"
volumes:
- /opt/docker/data/search/searxng:/etc/searxng:rw
- searxng-cache:/var/cache/searxng:rw
environment:
- SEARXNG_BASE_URL=https://myhost.tailnet-me.ts.net:8888/
volumes:
search-valkey-data:
searxng-cache:
I use tailscale serve
to expose SearXNG within my tailnet over HTTPS at the SEARXNG_BASE_URL
you see in the configuration.
I also recommend reviewing the default SearXNG configuration and enabling search engines you feel will be helpful; in particular, a number of programming-related engines are available but disabled by default.
Tavily
Tavily is a commerical provider of search & web access APIs for LLMs. They have a free plan with sufficient limits for personal use, and if you hit those limits their pay-as-you-go prices are inexpensive for small-scale use. They also provide an MCP server; you just need to create an account and retrieve your API key.
Claude JSON for Tavily MCP
"tavily": {
"type": "http",
"url": "https://mcp.tavily.com/mcp/?tavilyApiKey=tvly-dev-mytavilyapikeyhere"
},
Opencode JSON for Tavily MCP
"tavily": {
"type": "remote",
"url": "https://mcp.tavily.com/mcp/?tavilyApiKey=tvly-dev-mytavilyapikeyhere",
"enabled": true
},
MCP Guidance in CLAUDE.md
I've seen good results from both SearXNG and Tavily, but SearXNG is free and Tavily is (with enough use) pay-as-you-go. I've added this section near the end of my user-level CLAUDE.md
(~/.claude/CLAUDE.md
) to help guide the LLM regarding when to use these tools:
## MCP Tool Guidelines
- Use Context7 to validate current documentation about software libraries
- Use searxng if your primary Web Search or Fetch tools fail
- Use Tavily ONLY when searxng doesn't give you enough information
I can't speak for other LLM coding tools, but I'll note that Opencode actually does refer to this file; it's not 100% Claude-specific.
Context7 for Documentation
Context7 is reasonably well-known at this point. It allows LLMs to search for up-to-date documentation on a wide range of software libraries. Setting up the MCP server is simple; as with Tavily you'll need to sign up and get an API key.
Claude JSON for Context7 MCP
"context7": {
"type": "http",
"url": "https://mcp.context7.com/mcp",
"headers": {
"CONTEXT7_API_KEY": "ctx7sk-aaaa-bbbb-cccc-dddd"
}
}
Opencode JSON for Context7 MCP
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp",
"enabled": true,
"headers": {
"CONTEXT7_API_KEY": "ctx7sk-aaaa-bbbb-cccc-dddd"
}
},
Raindrop for Research & Context
I use Raindrop.io heavily to keep a searchable index of interesting & useful stuff I've encountered across the Web. I even have automations set up that create Raindrop bookmarks for everything I save to Instapaper and star on GitHub.
So it should be unsurprising that I've found it useful for Claude Code (along with Claude Desktop) to have access to my bookmarks. I can give Claude vague instructions like "install that Golang retry library I recently bookmarked" and get good results!
For easy deployment of a Raindrop MCP server without requiring a local checkout, I've created a Docker image for hiromitsusasaki/raindrop-io-mcp-server. You'll just need a Raindrop.io API token.
Claude JSON for Raindrop MCP
"raindrop": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"--init",
"-e", "RAINDROP_TOKEN",
"docker.io/cdzombak/raindrop-mcp-server:latest"
],
"env": {
"RAINDROP_TOKEN": "aaaa-bbbb-cccc-dddd"
}
},
Opencode JSON for Raindrop MCP
"raindrop": {
"type": "local",
"command": [
"docker",
"run",
"--rm",
"-i",
"--init",
"-e", "RAINDROP_TOKEN",
"docker.io/cdzombak/raindrop-mcp-server:latest"
],
"enabled": true,
"environment": {
"RAINDROP_TOKEN": "aaaa-bbbb-cccc-dddd"
}
},
Caution on Loading Too Many Tools
Adding MCP servers comes at some cost. Each additional MCP server, especially ones with a lot of tools, uses space in your context, and responses from MCP servers like GitHub and Context7 can eat up context pretty quickly.
This is why, for example, sequential-thinking
didn't make the cut here. Claude Code has solid concepts of "thinking" and "planning" built in, as does Claude Desktop. I've seen both of these use sequential-thinking
in the past, but not so much recently, and I don't think it's worth cluttering the context to add this MCP server.
Compare this situation to GitHub's MCP server. It uses a lot of tokens in your context, especially if you start using its workflow-related tools, but IMO the utility and results make this cost worth it.
Context is there to be used, after all, not conserved for no purpose. Plus, the recent Claude Sonnet 4.5 release includes some innovative context management logic & tools; and I expect future releases will continue to iteratively mitigate the context impacts of MCP servers.
(I would love it if my Claude account could get access to Sonnet with 1M-token context, though!)