Skip to main content
Glama

MCP Dynamic Tools

by xcud

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

  1. File Discovery: Server monitors your tools directory
  2. Code Analysis: Validates Python files have invoke(arguments) function
  3. Schema Extraction: Parses docstrings for parameter definitions
  4. MCP Integration: Exposes tools via standard MCP protocol
  5. 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!

  1. Fork the repository
  2. Create your feature branch
  3. Add tests for new functionality
  4. 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
-
security - not tested
A
license - permissive license
-
quality - not tested

local-only server

The server can only run on the client's local machine because it depends on local resources.

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.

  1. How it works
    1. Quick Start
      1. Clone and Setup
      2. Create Tools Directory
      3. Configure Your MCP Client
      4. Create Your First Tool
      5. Restart Your MCP Client
    2. How It Works
      1. Writing Tools
        1. Function Signature
        2. Documentation Format
        3. Example Tools
      2. Robust Error Handling
        1. Known Limitations
          1. Claude Desktop 0.9.2
          2. Tool Naming in Claude Desktop
        2. Contributing
          1. License
            1. Acknowledgments

              Related MCP Servers

              • -
                security
                F
                license
                -
                quality
                This is an MCP server that facilitates building tools for interacting with various APIs and workflows, supporting Python-based development with potential for customizable prompts and user configurations.
                Last updated -
                Python
              • -
                security
                A
                license
                -
                quality
                An MCP server implementation that standardizes how AI applications access tools and context, providing a central hub that manages tool discovery, execution, and context management with a simplified configuration system.
                Last updated -
                9
                Python
                MIT License
              • -
                security
                A
                license
                -
                quality
                An MCP server that enables dynamic tool registration and execution based on API definitions, providing seamless integration with services like Claude.ai and Cursor.ai.
                Last updated -
                7
                Python
                MIT License
                • Apple
              • -
                security
                -
                license
                -
                quality
                An MCP server that enables AI assistants to access up-to-date documentation for Python libraries like LangChain, LlamaIndex, and OpenAI through dynamic fetching from official sources.
                Last updated -
                1
                Python
                MIT License

              View all related MCP servers

              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/xcud/mcp-dynamic-tools'

              If you have feedback or need assistance with the MCP directory API, please join our Discord server