MCP Dynamic Tools
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: Modular MCP Server
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
Available Tools
1 toolwrite_toolB
Create a new dynamic MCP tool by writing Python code to a file
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the tool (without .py extension) | |
| content | Yes | Python code content for the tool with proper invoke(arguments) function |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description fails to disclose side effects like file overwriting, permissions required, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence efficiently conveys primary action, though could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has side effects (file writing) but no return value explained, no info on overwriting behavior, and no output schema. Description is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% but description adds useful details: name should omit .py extension, content must include invoke() function.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a new dynamic MCP tool by writing Python code to a file, using specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
With only one tool, there is no possibility of confusion. The tool's purpose is clearly distinct and singular.
Naming is perfectly consistent as there is only one tool. The verb_noun pattern 'write_tool' is clear and follows a logical structure.
The single tool is appropriate for the core functionality of creating a dynamic tool, but the server's purpose suggests a need for additional management tools (e.g., list, delete), making the count feel slightly thin.
The tool set covers creation only, lacking any lifecycle operations like listing, updating, or deleting dynamic tools. This leaves significant gaps for agents needing to manage tools beyond creation.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Nifty's MCP server ā exposes tasks, projects, messages, and files as tools for AI agents.
MCP server exposing the Backtest360 engine API as tools for AI agents.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Related MCP Servers
AlicenseNot gradedqualityDmaintenanceA dynamic MCP server implementation that automatically loads tools, resources, and prompts from their respective directories, allowing for easy extension and configuration.MIT- FlicenseNot gradedqualityDmaintenanceA scalable, auto-discovering Model Context Protocol server that dynamically loads tools from the tools directory, enabling LLMs to access various capabilities through a standardized interface.
- AlicenseNot gradedqualityDmaintenanceA hot-reloadable MCP proxy server that enables users to create and manage custom Python tools through dynamic module loading. Users can build their own utilities, wrap APIs, and extend functionality by simply adding Python files to designated folders.7Apache 2.0
- FlicenseNot gradedqualityNot gradedmaintenanceA dynamic server that automatically discovers and executes scripts from a tools directory as isolated processes using the MCP protocol. It enables users to easily extend server capabilities by adding new tool scripts that communicate via JSON.
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Positronic-AI/mcp-dynamic-tools'
If you have feedback or need assistance with the MCP directory API, please join our Discord server