toolsmith

toolsmith

Provides codebase intelligence over Git repositories with tools for code search, symbol lookup, dependency tracing, and commit history. It also rewrites its own tool descriptions and schemas based on usage telemetry to improve tool selection.

Category
Visit Server

README

toolsmith

An MCP server that rewrites its own tool surface from usage data, and measures whether that made it better.

The claim, and why it needs a benchmark

"Self-improving" is a phrase that usually means nothing. Something changes, the output looks different, and nobody can say whether it improved. This repository is organized to make that failure impossible: the benchmark is built before the optimizer, results are reported on tasks never used for optimization, and every proposed change is kept only if it survives measurement.

The headline number is tool-selection accuracy on a held-out task set, before and after optimization. If that number does not move, the project's finding is that this approach does not work — which is a result, and it gets reported as one.

What the server does

A tool surface needs to be real to be worth optimizing, so toolsmith serves codebase intelligence over a Git repository:

Tool Purpose
search_code Content search with path and language filters
read_file File contents, optionally a line range
find_symbol Locate a definition by name
find_references Where a symbol is used
trace_dependencies Import and call graph traversal
search_commits Commit history by message, author, or path
blame_range Who last changed a line range, and in which commit

Seven tools with genuinely overlapping purposes — search_code, find_symbol, and find_references are all "find where a thing is", which is exactly the ambiguity that makes tool selection hard and therefore worth optimizing.

The three optimizations

Description rewriting. Telemetry records every call: which tool, what arguments, whether it succeeded, and how it failed. A tool that is frequently selected for tasks it cannot serve has a description that overclaims; a tool that is passed over for tasks it handles well has one that underclaims. Both are rewritten, re-benchmarked, and kept only on improvement.

Schema tightening. Parameters that models consistently malform — free-text where an enum belongs, an ambiguous date format, a path that should be repo-relative — get constrained so the mistake becomes unrepresentable rather than merely discouraged.

Macro synthesis. When telemetry shows a call chain recurring — find_symbol → read_file → find_references, over and over — a single composite tool is proposed for it. Fewer round trips, less context consumed, fewer chances to pick wrong.

What this deliberately does not do

It does not generate or register executable tool code. A server that writes new code for itself and then runs it is a much more interesting demo and a genuinely worse idea: arbitrary generation plus execution, in the component an agent is trusting. Descriptions, schemas, and composition of existing implementations get the result without that.

Measuring

bench/ holds a task suite split into a development half and a held-out half. Optimization only ever sees development tasks. Reported numbers only ever come from the held-out half. Overfitting a benchmark and calling it self-improvement is the failure mode this project exists to avoid.

Stack

Python 3.12, the official MCP Python SDK, claude-opus-5 with adaptive thinking for rewriting and for benchmark scoring.

Install

uv sync
uv run pytest

Serving the tools needs only a Git repository to point at. Optimization and benchmarking need ANTHROPIC_API_KEY.

Status

Under active development. See PLAN.md for the milestone breakdown and PROGRESS.md for the running log.

License

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured