Explicación del desarrollo de servidores MCP y Python
Conocer MCP por primera vez
MCP (Model Context Protocol), es un protocolo desarrollado para estandarizar la forma en que las aplicaciones proporcionan contexto para grandes modelos.MCP proporciona una forma estándar de proporcionar datos, herramientas para LLM, el uso de MCP facilitará la construcción de Agentes o flujos de trabajo complejos basados en LLM.
construya
MCP es una estructura CS en la que una aplicación host MCP puede enlazar varios servidores MCP.
- MCP Host: Programas que necesitan obtener datos a través de MCP, como Claude Desktop, IDEs o algunas herramientas de IA, etc.
- Cliente MCP: cliente del protocolo MCP, y el servidor MCP es un soporte uno a uno.
- Servidor MCP: una aplicación ligera que necesita exponer algunas capacidades especiales a través de MCP. De acuerdo con la definición del protocolo MCP, el Servidor puede proporcionar tres tipos de capacidades estándar, Recursos, Herramientas, Avisos, cada Servidor puede proporcionar simultáneamente tres tipos de capacidades o una de ellas.
- Recursos: los recursos, similares a la lectura de datos de archivos, pueden ser recursos de archivos o el contenido devuelto por la respuesta de la API.
- Herramientas: Herramientas, servicios de terceros, funciones de función, a través de las cuales puedes controlar qué funciones pueden ser llamadas por LLM.
- Prompts: Prompts, plantillas predefinidas para que el usuario complete tareas específicas.
- Recursos de datos locales: Archivos locales, bases de datos, servicios, etc. a los que MCP Server puede acceder de forma segura.
- Servicio remoto: Sistema externo al que el Servidor MCP puede conectarse a través de una red (por ejemplo, una API).
Esquema de los servicios de MCP:
Los Servidores MCP proporcionan alguna lista de funciones a la Aplicación Host a través del Protocolo MCP (por ejemplo, proporcionan una lista de herramientas), y luego la Aplicación Host formatea esta lista en un formato que LLM pueda leer y entender. La Aplicación Host puede usar esta lista de funciones para enviar algunas peticiones a LLM que necesitan ser procesadas por el modelo grande (este es el prompt), y LLM devolverá una cadena json de tool_calls basada en este prompt. Cuando la Aplicación Host reciba estas tool_calls, llamará a la herramienta correspondiente del servidor MCP para devolver los resultados correspondientes.
Uso de MCP con Claude Desktop
Con la ayuda del cliente de escritorio Claude, que sin duda necesita para instalar uno primero, y esta instalación se omite. Configuramos un sistema de archivos MCP Server.
A continuación, seleccione Editar configuración en Desarrollador,
espectáculo (una entrada)claude_desktop_config.json
Para completar la configuración del servidor MCP del sistema de archivos. (Nombre de usuario de configuración debe ser reemplazado con el nombre de usuario de su propio ordenador, pero también es necesario instalar localmente el entorno node.js).
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/username/Desktop",
"/Users/username/Downloads"
]
}
}
}
Una vez completada la configuración, reinicia el cliente Cluade. Estará listo para probarlo.

Haga clic en el icono del martillo para ver las herramientas que ofrece MCP Server.

Puede probarlo escribiendo el siguiente mensaje
Can you take all the images on my desktop and move them to a new folder called “Images”?
El servidor MCP de retroalimentación y sistema de archivos de LLM se ejecuta con algunos recordatorios más de permisos, recuerde permitirlos.

A continuación, puede ver LLM, MCPServer empezar a trabajar.

Tutorial de introducción al desarrollo de servidores MCP (python y pip)
Servidor mcp simple utilizando la pila tecnológica python
Requiere instalación
El servidor MCP requiere python-sdk, python necesita 3.10, instale lo siguiente
pip install mcp
PS: MCP utiliza oficialmente la herramienta de gestión de paquetes uv, por lo general uso pip más, por lo que el texto es principalmente pip. Debido a que algunas de las dependencias de la versión del paquete mcp no es la última, así que lo mejor es conseguir un entorno limpio. El desarrollo de un servidor MCP requiere un cliente de depuración, MCP inspector proporciona esta función
npx @modelcontextprotocol/inspector <command> <arg1> <arg2>
Donde comando debemos python si estamos usando Servidor escrito en python.<arg1> <arg2>
es un parámetro opcional. Después del inicio
Desarrollar un servidor MCP de demostración
Servidor MCP: una aplicación ligera que necesita exponer algunas capacidades especiales a través de MCP. De acuerdo con la definición del protocolo MCP, el Servidor puede proporcionar tres tipos de capacidades estándar, Recursos, Herramientas, Avisos, cada Servidor puede proporcionar simultáneamente tres tipos de capacidades o una de ellas.
- Recursos: los recursos, similares a la lectura de datos de archivos, pueden ser recursos de archivos o el contenido devuelto por la respuesta de la API.
- Herramientas: Herramientas, servicios de terceros, funciones de función, a través de las cuales puedes controlar qué funciones pueden ser llamadas por LLM.
- Prompts: Prompts, plantillas predefinidas para que el usuario complete tareas específicas.
He aquí una demostración de los tres tipos de capacidades, utilizando python-sdk.
Prompts
Empecemos por el prompt y pasemos por elhandle_list_promopts
Listado de plantillas de palabras clave disponibles.handle_get_prompt
es obtener una plantilla de aviso específica basada en el nombre.
@server.list_prompts() async def handle_list_prompts() -> list[types.Prompt]: """ 提示模版定义 """ return [ types.Prompt( name="example-prompt", description="An example prompt template", arguments=[ types.PromptArgument( name="arg1", description="Example argument", required=True ) ] ) ] @server.get_prompt() async def handle_get_prompt( name: str, arguments: dict[str, str] | None ) -> types.GetPromptResult: """ 提示模板处理 """ if name != "example-prompt": raise ValueError(f"Unknown prompt: {name}") return types.GetPromptResult( description="Example prompt", messages=[ types.PromptMessage( role="user", content=types.TextContent( type="text", text="Example prompt text" ) ) ] )
Recursos
Código de las funciones de gestión de recursoslist_resources
Lista los recursos disponibles, devolviendo una lista de recursos.read_resource
SAMPLE_RESOURCES es una demo creada para pruebas.
@server.list_resources() async def list_resources() -> list[types.Resource]: """ 资源定义 """ test='test' return [ types.Resource( uri=AnyUrl(f"file:///{test}.txt"), name=test, description=f"A sample text resource named {test}", mimeType="text/plain", ) # for name in SAMPLE_RESOURCES.keys() ] SAMPLE_RESOURCES={'test':'this demo is a mcp server!'} @server.read_resource() async def read_resource(uri: AnyUrl) -> str | bytes: assert uri.path is not None print(uri.path) name = uri.path.replace(".txt", "").lstrip("/") # print(name) if name not in SAMPLE_RESOURCES: raise ValueError(f"Unknown resource: {uri}") return SAMPLE_RESOURCES[name]
Herramientas
工具定义和调用,handle_list_tools
定义可用的工具,使用 JSON Schema 验证工具参数。handle_call_tool
处理工具调用,根据工具名称和参数执行相应的操作。 @server.list_tools() async def handle_list_tools() -> list[types.Tool]: """ 工具定义. 每个工具都使用JSON Schema验证指定其参数. """ return [ types.Tool( name="demo-tool", description="Get data tool for a param", inputSchema={ "type": "object", "properties": { "param": { "type": "string", "description": "url", }, }, "required": ["param"], }, ) ] @server.call_tool() async def handle_call_tool( name: str, arguments: dict | None ) -> list[Any]: logging.info(name) """ 处理工具调用 """ if not arguments: raise ValueError("Missing arguments") if name == "demo-tool": param = arguments.get("param") if not param: raise ValueError("Missing state parameter") param = param.upper() return [ types.TextContent( type="text", text=f"text:{param}" ) ] else: raise ValueError(f"Unknown tool: {name}")
inspector
Un Servidor MCP ha sido escrito de la siguiente manera, puede iniciar el inspector MCP para depuración, en el directorio donde se encuentra el código del Servidor, ingrese
npx @modelcontextprotocal/inspector
Después del arranque, obtenga la siguiente captura de pantalla de acuerdo con la figura, visite http://localhost:5273, de acuerdo con lo que he dicho antes, seleccione STDIO para el tipo de transporte, python de entrada para el comando, server.py de entrada para Argumentos (el código de demostración anterior se guarda en el archivo server.py), haga clic en conectar. En el diagrama, puede introducir la correspondiente llamada al servicio del servidor por cada tipo, y haga clic en List Resource en Resources para listar todos los recursos, y haga clic en el recurso correspondiente para ver el contenido del recurso específico.
Esto nos permite interactuar con el servidor MCP que hemos desarrollado.
Cómo configurar en escritorio Claude
Configura este Servidor MCP en Claude siguiendo la configuración de comandos que acabas de hacer en inspector. Haga clic en la configuración del escritorio Claude, seleccione la pestaña de desarrollador y luego haga clic en editar config para saltar a claude_desktop_config.json.
Actualmente tengo instalados dos Servidores MCP con las siguientes configuraciones, uno para organización de archivos y otro para playwright (para instalar el Servidor MCP de playwright mediante npx.
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/crisschan/Desktop",
"/Users/crisschan/Downloads"
]
},
"playwright": {
"command": "npx",
"args": ["-y",
"@executeautomation/playwright-mcp-server"]
}
}
}
Configure nuestro propio servicio de demostración en este formato, luego guarde y reinicie el escritorio Claude.
{
"mcpServers": {
,
"demo": {
"command": "/opt/anaconda3/bin/python3",
"args": ["/Users/workspace/pyspace/try_mcp/server.py"]
}
}
}
Donde en la configuración, el comando debe ser la dirección absoluta de la versión correspondiente de python, y lo mismo ocurre con la ubicación del código server.py en los args, para utilizar la dirección absoluta.
© declaración de copyright
El artículo está protegido por derechos de autor y no debe reproducirse sin autorización.
Artículos relacionados
Sin comentarios...