Leverages Python for tool creation, enabling users to write Python files with an invoke() function that are automatically exposed as tools to MCP-compatible AI clients.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Dynamic Toolsgenerate a 16-character password with symbols"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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"Related MCP server: Agent Construct
Quick Start
1. Clone and Setup
git clone https://github.com/your-username/mcp-dynamic-tools
cd mcp-dynamic-tools2. Create Tools Directory
mkdir tools3. 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)functionSchema 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 resultDocumentation 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)signatureRuntime 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
This server cannot be installed
Resources
Looking for Admin?
Admins can modify the Dockerfile, update the server description, and track usage metrics. If you are the server author, to access the admin panel.