Skip to main content
Glama
daltonnyx
by daltonnyx

有用的模型上下文协议服务器(MCPS)

一组独立的 Python 脚本,用于实现模型上下文协议 (MCP) 服务器,以实现各种实用功能。每个服务器都提供专用工具,可供 AI 助手或其他支持 MCP 协议的应用程序使用。

什么是 MCP?

模型上下文协议 (MCP) 是 AI 助手与外部工具和服务交互的标准化方式。它允许 AI 模型通过调用 MCP 服务器提供的专用函数来扩展其功能。通信通过标准输入/输出 (stdio) 使用 JSON 消息进行。

Related MCP server: aleostudio MCP Server

可用服务器

每个 MCP 服务器都设计为使用 Python 环境管理器(如uv运行。

YouTube 数据提取器 ( ytdlp )

使用 yt-dlp 从 YouTube 视频中提取信息的服务器。

工具:

  • 提取章节:从 YouTube 视频中获取章节信息。

  • 提取字幕:从 YouTube 视频中获取特定章节或整个视频的字幕。

MCP 服务器配置:

"mcpServers": {
  "ytdlp": {
    "name": "youtube", // Optional friendly name for the client
    "command": "uv",
    "args": [
      "run",
      "--directory", "<path/to/repo>/useful-mcps/ytdlp", // Path to the MCP directory containing pyproject.toml
      "--", // Separator before script arguments, if any
      "ytdlp_mcp" // Match the script name defined in pyproject.toml [project.scripts]
    ]
    // 'cwd' is not needed when using --directory
  }
}

Word 文档处理器( docx_replace

用于操作Word文档的服务器,包括模板处理和PDF转换。

工具:

  • 流程模板:替换 Word 模板中的占位符并管理内容块。

  • 获取模板键:从 Word 文档模板中提取所有替换键。

  • 转换为 PDF :将 Word 文档 (docx) 转换为 PDF 格式。

MCP 服务器配置:

"mcpServers": {
  "docx_replace": {
    "name": "docx", // Optional friendly name
    "command": "uv",
    "args": [
      "run",
      "--directory", "<path/to/repo>/useful-mcps/docx_replace", // Path to the MCP directory
      "--",
      "docx_replace_mcp" // Match the script name defined in pyproject.toml
    ]
  }
}

PlantUML 渲染器 ( plantuml )

使用 PlantUML 服务器(通常通过 Docker 运行)渲染 PlantUML 图的服务器。

工具:

  • 渲染图表:将 PlantUML 文本转换为图表图像(例如 PNG)。

MCP 服务器配置:

"mcpServers": {
  "plantuml": {
    "name": "plantuml", // Optional friendly name
    "command": "uv",
    "args": [
      "run",
      "--directory", "<path/to/repo>/useful-mcps/plantuml", // Path to the MCP directory
      "--",
      "plantuml_server" // Match the script name defined in pyproject.toml
    ]
  }
}

(注意:需要运行可访问的 PlantUML 服务器,可能通过服务中实现的 Docker 进行管理)。

美人鱼渲染器( mermaid

使用 mermaidchart.com API 渲染美人鱼图表的服务器。

工具:

  • 渲染美人鱼图表:通过在 mermaidchart.com 上创建文档将美人鱼代码转换为 PNG 图像。

MCP 服务器配置:

"mcpServers": {
  "mermaid": {
    "name": "mermaid", // Optional friendly name
    "command": "uv",
    "args": [
      "run",
      "--directory", "<path/to/repo>/useful-mcps/mermaid", // Path to the MCP directory
      "--",
      "mermaid_mcp" // Match the script name defined in pyproject.toml
    ],
    "env": { // Environment variables needed by the MCP
        "MERMAID_CHART_ACCESS_TOKEN": "YOUR_API_TOKEN_HERE"
    }
  }
}

(注意:需要将 Mermaid Chart API 访问令牌设置为环境变量)。

Rss feed 到 markdown ( rss2md )

用于将 RSS 提要内容转换为带有日期过滤功能的 markdown 格式的服务器。

工具:

  • fetch_rss_to_markdown :获取 RSS 提要,按日期过滤文章,并返回格式化为 Markdown 列表的匹配文章。

MCP 服务器配置:

"mcpServers": {
  "mermaid": {
    "name": "rss2md", // Optional friendly name
    "command": "uv",
    "args": [
      "run",
      "--directory", "<path/to/repo>/useful-mcps/rss2md", // Path to the MCP directory
      "--",
      "rss2md_mcp" // Match the script name defined in pyproject.toml
    ],
    "env": { // Environment variables needed by the MCP
    }
  }
}

安装

  1. 克隆存储库:

    git clone https://github.com/daltonnyx/useful-mcps.git # Replace with the actual repo URL if different
    cd useful-mcps
  2. **安装uv**如果您没有uv ,请安装它:

    pip install uv
    # or follow instructions at https://github.com/astral-sh/uv
  3. **依赖项:**依赖项通过pyproject.toml按 MCP 进行管理。当您第一次使用--directory运行 MCP 时, uv run通常会在虚拟环境中自动安装它们。

用法

运行服务器

建议使用uv run --directory <path>指向特定 MCP 目录pyproject.toml uv虚拟环境和依赖项。

示例(来自根useful-mcps目录):

# Run the YouTube MCP
uv run --directory ./ytdlp ytdlp_mcp

# Run the Mermaid MCP (ensure token is set in environment)
uv run --directory ./mermaid mermaid_mcp

或者,配置您的 MCP 客户端(如上面的示例 JSON 配置)以直接执行uv run --directory ...命令。

连接到服务器

配置您的 MCP 客户端应用程序,使用每个服务器的“MCP 服务器配置”示例中所示的commandargs结构来启动所需的服务器。确保command指向您的uv可执行文件,并且args正确指定--directory ,其中包含 MCP 文件夹的路径和要运行的脚本名称。使用env属性传递必要的环境变量(例如 API 令牌)。

特定工具的使用示例

这些显示了您将发送到相应 MCP 服务器的call_tool函数的示例arguments

YouTube数据提取器

提取章节

{
  "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
}

提取字幕

{
  "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "language": "en",
  "chapters": [
    {
      "title": "Introduction",
      "start_time": "00:00:00",
      "end_time": "00:01:30"
    }
  ]
}

Word文档处理器

流程模板

{
  "template_file": "/path/to/template.docx",
  "replacements": {
    "name": "John Doe",
    "date": "2023-05-15"
  },
  "blocks": {
    "optional_section": true,
    "alternative_section": false
  },
  "output_filename": "/path/to/output.docx"
}

(注意: template_filedocx_file也可以接受 base64 编码的字符串而不是路径)

获取模板密钥

{
  "template_file": "/path/to/template.docx"
}

转换为 PDF

{
  "docx_file": "/path/to/document.docx",
  "pdf_output": "/path/to/output.pdf"
}

PlantUML渲染器

渲染图

{
  "input": "participant User\nUser -> Server: Request\nServer --> User: Response",
  "output_path": "/path/to/save/diagram.png"
}

(注意: input也可以是.puml文件的路径)

美人鱼渲染器

渲染美人鱼图表

{
  "mermaid_code": "graph TD;\n    A-->B;\n    A-->C;\n    B-->D;\n    C-->D;",
  "output_path": "/path/to/save/mermaid.png",
  "theme": "default" // Optional, e.g., "default", "dark", "neutral", "forest"
}

发展

添加新的 MCP 服务器

  1. 为您的 MCP 创建一个新目录(例如, my_new_mcp )。

  2. 在目录内创建:

    • pyproject.toml :定义项目元数据、依赖项和脚本入口点(例如, [project.scripts]部分映射my_new_mcp = "my_new_mcp:main" )。

    • pyrightconfig.json :(可选)用于类型检查。

    • 您的主要 Python 文件(例如, my_new_mcp.py ):使用mcp库实现 MCP 逻辑(参见下面的模板)。

  3. 实现所需的类和函数( servelist_toolscall_tool )。

基本模板( my_new_mcp.py ):

import json
import logging
import asyncio
from typing import List, Dict, Any, Optional
# Assuming mcp library is installed or available
# from mcp import Server, Tool, TextContent, stdio_server
# Placeholder imports if mcp library structure is different
from typing import Protocol # Using Protocol as placeholder

# Placeholder definitions if mcp library isn't directly importable here
class Tool(Protocol):
    name: str
    description: str
    inputSchema: dict

class TextContent(Protocol):
    type: str
    text: str

class Server:
    def __init__(self, name: str): pass
    def list_tools(self): pass # Decorator
    def call_tool(self): pass # Decorator
    def create_initialization_options(self): pass
    async def run(self, read_stream, write_stream, options): pass

# Placeholder context manager
class stdio_server:
    async def __aenter__(self): return (None, None) # Dummy streams
    async def __aexit__(self, exc_type, exc, tb): pass


# Pydantic is often used for schema definition
# from pydantic import BaseModel
# class MyInput(BaseModel):
#     param1: str
#     param2: int

class MyInputSchema: # Placeholder if not using Pydantic
    @staticmethod
    def model_json_schema():
      return {"type": "object", "properties": {"param1": {"type": "string"}, "param2": {"type": "integer"}}, "required": ["param1", "param2"]}


class MyTools:
    TOOL_NAME = "my.tool"

class MyService:
    def __init__(self):
        # Initialize resources if needed
        pass

    def my_function(self, param1: str, param2: int) -> dict:
        # Implement your tool functionality
        logging.info(f"Running my_function with {param1=}, {param2=}")
        # Replace with actual logic
        result_content = f"Result: processed {param1} and {param2}"
        return {"content": result_content}

async def serve() -> None:
    logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
    server = Server("mcp-my-service")
    service = MyService()

    @server.list_tools()
    async def list_tools() -> list[Tool]:
        logging.info("list_tools called")
        return [
            Tool(
                name=MyTools.TOOL_NAME,
                description="Description of my tool",
                # Use Pydantic's schema or manually define
                inputSchema=MyInputSchema.model_json_schema(),
            ),
        ]

    @server.call_tool()
    async def call_tool(name: str, arguments: dict) -> list[TextContent]:
        logging.info(f"call_tool called with {name=}, {arguments=}")
        try:
            if name == MyTools.TOOL_NAME:
                # Add validation here if not using Pydantic
                param1 = arguments.get("param1")
                param2 = arguments.get("param2")
                if param1 is None or param2 is None:
                     raise ValueError("Missing required arguments")

                result = service.my_function(param1, int(param2)) # Ensure type conversion if needed
                logging.info(f"Tool executed successfully: {result=}")
                return [TextContent(type="text", text=json.dumps(result))] # Return JSON string
            else:
                logging.warning(f"Unknown tool requested: {name}")
                raise ValueError(f"Unknown tool: {name}")
        except Exception as e:
            logging.error(f"Error executing tool {name}: {e}", exc_info=True)
            # Return error as JSON
            error_payload = json.dumps({"error": str(e)})
            return [TextContent(type="text", text=error_payload)]

    options = server.create_initialization_options()
    logging.info("Starting MCP server...")
    async with stdio_server() as (read_stream, write_stream):
        await server.run(read_stream, write_stream, options)
    logging.info("MCP server stopped.")

def main():
    # Entry point defined in pyproject.toml `[project.scripts]`
    try:
        asyncio.run(serve())
    except KeyboardInterrupt:
        logging.info("Server interrupted by user.")

if __name__ == "__main__":
    # Allows running directly via `python my_new_mcp.py` for debugging
    main()

测试

从根目录使用 pytest 运行测试:

pytest tests/

(确保安装了测试依赖项,可能通过uv pip install pytest或通过将pytest添加到pyproject.toml文件之一中的 dev 依赖项中)。

执照

MIT 许可证

贡献

欢迎贡献代码!欢迎提交 Pull 请求。

A
license - permissive license
Not graded
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for using various search tools like Tavily API. Planning to support various search tools (i.e. wiki search, searxng, etc)
    3
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    A lightweight MCP server providing utility tools for math, text processing, data conversion, and URL fetching. It supports both STDIO and SSE communication modes for seamless integration with Claude Desktop and remote AI agents.
    5
    1
  • A
    license
    Not graded
    quality
    D
    maintenance
    A collection of simple, practical MCP servers that require zero configuration, enabling web search via DuckDuckGo (no API key needed) and management of Hexo blogs through AI.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A simple MCP server that provides basic utility tools for text manipulation, file operations, and calculations, intended to be connected to Claude AI desktop app.

View all related MCP servers

Related MCP Connectors

  • MCP server for accessing curated awesome list documentation

  • Markdown-first MCP server for Notion API with 8 composite tools and 39 actions.

  • MCP server for AI dialogue using various LLM models via AceDataCloud

View all MCP Connectors

Appeared in Searches

Latest Blog Posts

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/daltonnyx/userful-mcps'

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