MCP Dynamic Tools
A dynamic MCP server that automatically discovers Python files in a directory and exposes them as tools to any MCP-compatible AI client, allowing users to easily create and deploy custom AI tools.
README
MCP Dynamic Tools
Drop Python files, get MCP tools instantly.
A dynamic MCP server that automatically discovers Python files in a directory and exposes them as tools to any MCP-compatible AI client. Created through collaboration between Ben Wilson and Claude (Anthropic).
How it works
# 1. Write a Python file or have the LLM write one
def invoke(arguments):
"""Generate a secure password
Parameters:
- length: Length of password (default: 12)
- include_symbols: Include special characters (default: true)
"""
import random, string
length = int(arguments.get('length', 12))
chars = string.ascii_letters + string.digits
if arguments.get('include_symbols', 'true').lower() == 'true':
chars += "!@#$%^&*"
return ''.join(random.choice(chars) for _ in range(length))
# 2. Save it to your tools directory
echo "# Above code" > tools/password_generator.py
# 3. AI can now use it immediately (after restart in Claude Desktop)
🤖 "Generate a 16-character password with symbols"
🔧 Tool: password_generator(length="16", include_symbols="true")
📤 Result: "K9#mP2$vR8@nQ3!x"
Quick Start
1. Clone and Setup
git clone https://github.com/your-username/mcp-dynamic-tools
cd mcp-dynamic-tools
2. Create Tools Directory
mkdir tools
3. Configure Your MCP Client
Claude Desktop (~/.config/claude_desktop_config.json):
{
"mcpServers": {
"mcp-dynamic-tools": {
"command": "python3",
"args": [
"/path/to/mcp-dynamic-tools/src/mcp_dynamic_tools/server.py",
"--tools-dir",
"/path/to/tools"
]
}
}
}
4. Create Your First Tool
# tools/hello.py
def invoke(arguments):
"""Say hello to someone
Parameters:
- name: The person to greet
"""
name = arguments.get('name', 'World')
return f"Hello, {name}! 👋"
5. Restart Your MCP Client
Your hello tool is now available to any AI using your MCP client!
How It Works
- File Discovery: Server monitors your tools directory
- Code Analysis: Validates Python files have
invoke(arguments)function - Schema Extraction: Parses docstrings for parameter definitions
- MCP Integration: Exposes tools via standard MCP protocol
- Error Handling: Provides detailed feedback for debugging
Writing Tools
Function Signature
Every tool must have this exact signature:
def invoke(arguments):
# Your tool logic here
return result
Documentation Format
def invoke(arguments):
"""Brief description of what the tool does
Parameters:
- param_name: Description of the parameter
- another_param: Description with (default: value)
"""
Example Tools
Text Processor:
def invoke(arguments):
"""Transform text in various ways
Parameters:
- text: The text to transform
- operation: Type of transformation (uppercase, lowercase, reverse)
"""
text = arguments.get('text', '')
operation = arguments.get('operation', 'uppercase')
if operation == 'uppercase':
return text.upper()
elif operation == 'lowercase':
return text.lower()
elif operation == 'reverse':
return text[::-1]
else:
return f"Unknown operation: {operation}"
API Caller:
def invoke(arguments):
"""Fetch data from a REST API
Parameters:
- url: The API endpoint to call
- method: HTTP method (default: GET)
"""
import urllib.request
import json
url = arguments.get('url')
method = arguments.get('method', 'GET')
if not url:
return "Error: URL is required"
try:
with urllib.request.urlopen(url) as response:
return json.loads(response.read())
except Exception as e:
return f"Error: {str(e)}"
Robust Error Handling
The server provides detailed error messages to help you debug:
- Syntax Errors: Shows line numbers and specific issues
- Import Errors: Reports missing dependencies
- Function Signature: Validates
invoke(arguments)signature - Runtime Errors: Captures and reports execution problems
Known Limitations
Claude Desktop 0.9.2
Claude Desktop currently doesn't support dynamic tool discovery (see discussion). This means:
- ✅ Tools work perfectly once discovered
- ❌ Restart required when adding new tools
- 🔄 Future support planned - our server is ready with
listChanged: true
Workaround: Restart Claude Desktop after adding new tools.
Tool Naming in Claude Desktop
Tools appear with server prefix: local__mcp-dynamic-tools__your_tool_name
Contributing
This project was created through human-AI collaboration. We welcome contributions!
- Fork the repository
- Create your feature branch
- Add tests for new functionality
- Submit a pull request
License
MIT License - see LICENSE file for details.
Acknowledgments
- Ben Vierck - Architecture and development
- Claude (Anthropic) - Co-development and testing
- MCP Community - Protocol development and feedback
Recommended Servers
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.
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.
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.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
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.
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.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
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.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.