1. Conduid
  2. Developer Tools
  3. Custom Tools MCP Server
MCP server · Developer Tools

Custom Tools MCP Server

A simple, dependency-free way to create custom AI tools in Python and host the **Model Context Protocol (MCP)** server.

Unclaimed last commit 8 months ago devtools
45Fair

Scored 4 months ago · breakdown

About Custom Tools MCP Server

Custom Tools MCP Server is an MCP server published by johnjg75dev in the Developer Tools category: a simple, dependency-free way to create custom AI tools in Python and host the **Model Context Protocol (MCP)** server. It has been installed 0 times through Conduid.

Six months or more without a commit doesn't mean the server is broken, but check the open issues (0) before depending on it in production.

Install

Install
npx custom-tools-mcp-server

This server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.

Ask AI

Ask AI about Custom Tools MCP Server

Powered by Claude · Grounded in docs

I know everything about Custom Tools MCP Server. Ask me about installation, configuration, usage, or troubleshooting.

Security checks

  • ·README presentNot checked yet.
  • ·License declaredNot checked yet.
  • ·Tests presentNot checked yet.
  • ·Dependencies pinnedNot checked yet.
  • ·No dynamic code executionNot checked yet.
  • !Scoped permissionsDoesn't declare a permission scope. Assume it can do anything its process can.

README

Lightweight Python EZ-Tool MCP Server

A simple, dependency-free way to create custom AI tools in Python and host the Model Context Protocol (MCP) server.

This server allows you to expose Python functions as tools to AI models (like Claude Desktop, LM Studio, etc.) using a simple decorator (@mcp_tool). It supports both SSE (Server-Sent Events) for standard clients and Direct HTTP for stateless clients.

🚀 Features

  • Decorator-based: Register tools with a simple @mcp_tool decorator.
  • Auto-Documentation: Automatically extracts descriptions from standard Docstrings or Annotated type hints.
  • Universal Mode: Works with both streaming clients (Claude) and stateless clients (LM Studio).
  • No Heavy SDKs: Built with Starlette and Uvicorn.

📦 Installation

  1. Clone the repository:
    git clone https://github.com/yourusername/python-mcp-server.git
    cd python-mcp-server
    
  2. Install dependencies:
    pip install -r requirements.txt
    

🛠 Usage

1. Start the Server

Run the server on port 8000:

python main.py

2. Connect your AI Client

Option A: LM Studio

  1. Open LM Studio.
  2. Go to the MCP tab (the plug icon).
  3. Create a new server config (or edit mcp.json):
    {
      "mcpServers": {
        "python-tools": {
          "url": "http://localhost:8000/sse"
        }
      }
    }
    
  4. Connect. The status should turn Green.

Option B: Claude Desktop

  1. Edit your Claude config file:
    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
  2. Add the configuration:
    {
      "mcpServers": {
        "python-tools": {
          "command": "uv",
          "args": [
            "run",
            "--with",
            "uvicorn",
            "--with",
            "starlette",
            "--with",
            "sse-starlette",
            "python",
            "c:\\path\\to\\python-mcp-server\\main.py"
          ]
        }
      }
    }
    

📝 Adding New Tools

To add a new tool, simply create a new Python file in the tools/ folder (e.g., tools/weather.py). The server automatically scans this folder on startup.

You can document your tools in two ways. The server will convert these definitions into the JSON format required by the AI.

Style 1: Standard Docstrings (Google/Sphinx Style)

Best for clean, readable code. The parser automatically extracts parameter descriptions from the Args: block.

from registry import mcp_tool

@mcp_tool
def get_weather(location: str, days: int = 3):
    """
    Get the weather forecast for a specific city.

    Args:
        location: The city to search for (e.g. Paris, London).
        days: Number of days to forecast (1-7).
    """
    return f"Weather in {location} for {days} days: Sunny, 25C"

Style 2: Annotated Types (Modern)

Best for keeping the description right next to the parameter.

from typing import Annotated
from registry import mcp_tool

@mcp_tool
def calculate_bmi(
    weight: Annotated[float, "Weight in Kilograms"], 
    height: Annotated[float, "Height in Meters"]
):
    """Calculates Body Mass Index."""
    return weight / (height ** 2)

What the AI Sees (The Result)

When the server runs, it converts the Python functions above into this JSON Schema. This is what is sent to the AI so it knows how to call your tools.

{
  "name": "get_weather",
  "description": "Get the weather forecast for a specific city.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "location": {
        "type": "string",
        "description": "The city to search for (e.g. Paris, London)."
      },
      "days": {
        "type": "integer",
        "description": "Number of days to forecast (1-7).",
        "default": 3
      }
    },
    "required": [
      "location"
    ]
  }
}

Note: Since days had a default value (= 3) in Python, it is marked as Optional in the JSON schema automatically.

📄 License

MIT License

README mirrored from the source repository 4 months ago. The original is authoritative.

Questions

About Custom Tools MCP Server

How do I install Custom Tools MCP Server?

Run npx custom-tools-mcp-server, then add the server to your MCP client's configuration. Conduid has recorded 0 installs, so the command is known to work with current clients.

Is Custom Tools MCP Server safe to use with an AI agent?

Its trust score is 45 out of 100 (fair). It passes 0 of 1 static security checks; the failures are listed above. It has no ConduID identity yet, so agent calls to it are not receipted.

Is Custom Tools MCP Server still maintained?

The last commit was 8 months ago, with 0 open issues. That's long enough that you should check whether the maintainer is responding to issues before depending on it.