Whistle MCP Server
Gestiona servidores proxy locales de Whistle a través de asistentes de IA, simplificando la depuración de redes, las pruebas de API y la gestión de reglas.
Documentación
Servidor MCP de Whistle
Inglés | 中文
Introducción del Proyecto
Whistle MCP Server es una herramienta de gestión de proxy Whistle basada en el Protocolo de Contexto de Modelo (MCP), que permite a los asistentes de IA operar y controlar directamente los servidores proxy Whistle locales. A través de esta herramienta, la IA puede ayudar a los usuarios a gestionar reglas, grupos, valores, monitorear solicitudes de red, reproducir y modificar solicitudes, etc., sin necesidad de operar manualmente la interfaz de Whistle. Simplifica enormemente el proceso de depuración de red, pruebas de API y gestión de reglas de proxy, permitiendo a los usuarios completar tareas complejas de configuración de proxy de red mediante interacción en lenguaje natural con la IA.
Características
- Gestión de Reglas: Crear, actualizar, renombrar, eliminar y habilitar/deshabilitar reglas de Whistle
- Gestión de Grupos: Crear, renombrar, eliminar grupos y operaciones de asociación entre reglas y grupos
- Gestión de Valores: Crear, actualizar, renombrar y eliminar valores, con soporte para gestión de grupos de valores
- Control de Proxy: Habilitar/deshabilitar proxy, interceptación HTTP/HTTPS, protocolo HTTP/2, etc.
- Interceptación de Solicitudes: Ver información de solicitudes de red interceptadas, con soporte de filtrado por URL
- Reproducción de Solicitudes: Soporte para reproducir solicitudes capturadas con parámetros de solicitud personalizados
- Modo Multi-Regla: Soporte para habilitar/deshabilitar el modo multi-regla
Instalación
Requisitos
Se requiere Node.js 18.20.0 o superior (ver engines en package.json). Las versiones anteriores no son compatibles.
Instalación mediante Smithery
Para instalar Whistle MCP Server para Claude Desktop automáticamente a través de Smithery:
npx -y @smithery/cli install @7gugu/whistle-mcp --client claude
Instalación Manual
Puedes instalar Whistle MCP Server globalmente mediante npm:
npm install -g whistle-mcp-tool
Compilar desde el código fuente
Desde la raíz del repositorio:
npm install
npm run build
La entrada de salida de la compilación es dist/index.js (el mismo archivo utilizado por el CLI whistle-mcp después de una instalación global). También puedes apuntar la configuración de MCP a él con node y la ruta a dist/index.js.
Configuración de MCP
Transporte (stdio vs HTTP)
Por defecto, el servidor utiliza stdio (adecuado para clientes MCP locales como Cursor).
Para exponer Streamable HTTP y SSE en el mismo proceso (para clientes remotos o compatibles con HTTP), utiliza --transport http-stream. FastMCP entonces escucha en --mcp-host / --mcp-port y sirve:
- Streamable HTTP:
http://<mcp-host>:<mcp-port><mcp-endpoint>(ruta predeterminada/mcp) - SSE:
http://<mcp-host>:<mcp-port>/sse
Alias para http-stream: sse, streamable-http (mismo modo; ambas URL están disponibles).
| Indicador / env | Significado |
|---|---|
--transport / -t, FASTMCP_TRANSPORT | stdio (predeterminado) o http-stream |
--mcp-port, FASTMCP_PORT | Puerto HTTP de MCP (predeterminado 8085 al usar transporte HTTP) |
--mcp-host, FASTMCP_HOST | Dirección de enlace (predeterminada 0.0.0.0) |
--mcp-endpoint, FASTMCP_ENDPOINT | Ruta de Streamable HTTP (predeterminada /mcp) |
--stateless, FASTMCP_STATELESS=true | Modo HTTP sin estado (opcional) |
Las opciones de conexión de Whistle no cambian: --host, --port, --username / --password (o -n / -w).
Ejemplo (transporte HTTP + Whistle local en 8899; MCP escucha en 8085 por defecto):
whistle-mcp --transport http-stream --host 127.0.0.1 --port 8899
Usa --mcp-port <port> para sobrescribir el 8085 predeterminado.
Después de la instalación, puedes configurar Whistle MCP en tu archivo de configuración JSON de MCP:
{
"mcpServers": {
"whistle-mcp": {
"command": "whistle-mcp",
"args": [
"--host=<whistle server IP address>",
"--port=<whistle server port number>"
]
}
}
}
Si inicias Whistle con autenticación básica (mismos indicadores que el CLI de Whistle: w2 start -n <username> -w <password>), pasa las mismas credenciales a este servidor MCP para que las solicitudes HTTP a la API de Whistle tengan éxito:
{
"mcpServers": {
"whistle-mcp": {
"command": "whistle-mcp",
"args": [
"--host=localhost",
"--port=8899",
"--username=<username>",
"--password=<password>"
]
}
}
}
Opciones cortas (alineadas con w2): -n / -w son equivalentes a --username / --password.
whistle-mcp --host localhost --port 8899 -n myuser -w mypass
Detalles de Configuración
- host: Dirección IP del servidor Whistle; predeterminada a
localhostsi se omite - port: Puerto del servidor Whistle; predeterminado a
8899si se omite - username (
-n/--username): Nombre de usuario de autenticación básica cuando Whistle se inició con-n; omítelo si Whistle no tiene inicio de sesión - password (
-w/--password): Contraseña de autenticación básica cuando Whistle se inició con-w; si se establece el nombre de usuario pero se omite la contraseña, se envía una contraseña vacía
Configuración de JSON de MCP en Clientes de IA
- Cliente Claude: https://modelcontextprotocol.io/quickstart/user
- Raycast: Requiere instalación del plugin MCP
- Cursor: https://docs.cursor.com/context/model-context-protocol#configuring-mcp-servers
Descripción de Herramientas MCP
Whistle MCP Server proporciona las siguientes herramientas, que se pueden llamar mediante el protocolo MCP:
Gestión de Reglas
| Nombre de Herramienta | Descripción | Función |
|---|---|---|
| getRules | Obtener todas las reglas | Listar todas las reglas creadas y su contenido |
| createRule | Crear nueva regla | Crear una nueva regla con el nombre especificado |
| updateRule | Actualizar contenido de regla | Modificar el contenido de una regla especificada |
| renameRule | Renombrar regla | Renombrar una regla a un nuevo nombre |
| deleteRule | Eliminar regla | Eliminar una regla con el nombre especificado |
| enableRule | Habilitar regla | Habilitar una regla con el nombre especificado |
| disableRule | Deshabilitar regla | Deshabilitar una regla con el nombre especificado |
| setAllRulesState | Establecer estado de todas las reglas | Habilitar o deshabilitar todas las reglas a la vez |
Gestión de Grupos
| Nombre de Herramienta | Descripción | Función |
|---|---|---|
| createGroup | Crear grupo | Crear un nuevo grupo de reglas con el nombre especificado |
| renameGroup | Renombrar grupo | Renombrar un grupo de reglas a un nuevo nombre |
| deleteGroup | Eliminar grupo | Eliminar un grupo de reglas con el nombre especificado |
| addRuleToGroup | Agregar regla al grupo | Agregar una regla especificada a un grupo específico |
| removeRuleFromGroup | Quitar regla del grupo | Quitar una regla de su grupo al nivel superior |
Gestión de Valores
| Nombre de Herramienta | Descripción | Función |
|---|---|---|
| getAllValues | Obtener todos los valores | Listar todos los valores y grupos de valores creados (nota: los datos pueden ser grandes, considera usar getValueList primero) |
| getValueList | Obtener lista de valores | Obtener lista de valores solo con índice y nombre (sin campo de datos, para evitar cargas grandes) |
| getValue | Obtener valor individual | Obtener información completa de un valor individual por nombre (incluyendo campo de datos) |
| createValue | Crear nuevo valor | Crear un nuevo valor con el nombre especificado |
| updateValue | Actualizar contenido de valor | Modificar el contenido de un valor especificado |
| renameValue | Renombrar valor | Renombrar un valor a un nuevo nombre |
| deleteValue | Eliminar valor | Eliminar un valor con el nombre especificado |
| createValuesGroup | Crear grupo de valores | Crear un nuevo grupo de valores con el nombre especificado |
| renameValueGroup | Renombrar grupo de valores | Renombrar un grupo de valores a un nuevo nombre |
| deleteValueGroup | Eliminar grupo de valores | Eliminar un grupo de valores con el nombre especificado |
| addValueToGroup | Agregar valor al grupo | Agregar un valor especificado a un grupo específico |
| removeValueFromGroup | Quitar valor del grupo | Quitar un valor de su grupo al nivel superior |
Control de Proxy
| Nombre de Herramienta | Descripción | Función |
|---|---|---|
| getWhistleStatus | Obtener estado del servidor | Obtener la información de estado actual del servidor Whistle |
| toggleProxy | Habilitar/deshabilitar proxy | Alternar el estado habilitado del proxy Whistle |
| toggleHttpInterception | Habilitar/deshabilitar interceptación HTTP | Alternar el estado habilitado de la interceptación de solicitudes HTTP |
| toggleHttpsInterception | Habilitar/deshabilitar interceptación HTTPS | Alternar el estado habilitado de la interceptación de solicitudes HTTPS |
| toggleHttp2 | Habilitar/deshabilitar HTTP2 | Alternar el estado habilitado del soporte del protocolo HTTP/2 |
| toggleMultiRuleMode | Habilitar/deshabilitar modo multi-regla | Alternar si se permite que múltiples reglas estén habilitadas simultáneamente |
Gestión de Solicitudes
| Nombre de Herramienta | Descripción | Función |
|---|---|---|
| getInterceptInfo | Obtener información de interceptación | Obtener información de solicitudes de red interceptadas por Whistle, con soporte de filtrado por URL y expresiones regulares |
| replayRequest | Reproducir solicitud | Reenviar una solicitud de red especificada con parámetros personalizables |
Utilidades
| Nombre de Herramienta | Descripción | Función |
|---|---|---|
| getCurrentTimestamp | Obtener marca de tiempo actual | Obtener la marca de tiempo local actual |
Información de Contacto
- Correo electrónico: gz7gugu@qq.com
- Blog: https://7gugu.com