MCP Hello World
Um servidor MCP mock mínimo em TypeScript para testar clientes MCP, suportando os protocolos STDIO e HTTP/SSE.
Documentação
MCP Hello World - Servidor MCP Mock para Testes
Este é um servidor mínimo de Model Context Protocol (MCP) implementado em TypeScript, destinado principalmente a servir como um Test Double / Servidor Mock.
Propósito Principal: Fornecer um ambiente de servidor MCP leve, controlável e previsível para testes unitários ou testes de integração de código de cliente que precisa interagir com um servidor MCP.
Observação: Este projeto não é adequado para ambientes de produção nem para implantação como um servidor MCP de uso geral.
Por que usar mcp-hello-world em Testes?
Ao testar código relacionado a clientes MCP, normalmente você não quer depender de um serviço de backend de IA real, potencialmente complexo e com respostas imprevisíveis. Usar mcp-hello-world como um test double oferece várias vantagens:
- Isolamento: Concentre seus testes na lógica do cliente sem se preocupar com problemas de rede ou com a disponibilidade do servidor real.
- Previsibilidade: As ferramentas fornecidas
echoedebugtêm comportamentos simples e fixos, facilitando a escrita de asserções. - Velocidade: Inicialização e tempos de resposta rápidos, adequados para uso frequente em testes unitários.
- Leve: Poucas dependências, fácil de integrar em ambientes de teste.
- Cobertura de Protocolo: Suporta ambos os protocolos de transporte MCP
STDIOeHTTP/SSE, permitindo testar o comportamento do cliente sob diferentes métodos de conexão.
Instalação
Adicione este pacote como uma dependência de desenvolvimento ao seu projeto:
# Using pnpm
pnpm add --save-dev mcp-hello-world
# Or using bun
bun add --dev mcp-hello-world
Execução Manual (para Depuração de Testes)
Você pode querer executar o servidor manualmente às vezes para depurar seus testes ou o comportamento do cliente.
Modo STDIO
Esta é a maneira mais simples de executar, especialmente durante o desenvolvimento e a depuração local.
# Ensure it's installed (globally or in the project)
# Using npx (universal)
npx mcp-hello-world
# Or using pnpm dlx
pnpm dlx mcp-hello-world
# Or using bunx
bunx mcp-hello-world
O servidor escutará na entrada padrão e enviará respostas MCP para a saída padrão. Você pode usar ferramentas como o MCP Inspector para se conectar ao processo.
Para configurar este servidor no seu cliente MCP, adicione o seguinte à sua configuração:
{
"mcpServers": {
"mcp-hello-world": {
"command": "npx",
"args": ["mcp-hello-world"]
}
}
}
Modo HTTP/SSE
Se você precisar depurar por meio de uma interface de rede ou testar clientes MCP baseados em HTTP.
# 1. Clone the repository (if not already installed in the project)
# git clone https://github.com/lobehub/mcp-hello-world.git
# cd mcp-hello-world
# pnpm install / bun install
# 2. Build the project
# Using pnpm
pnpm build
# Or using bun
bun run build
# 3. Start the HTTP server
# Using pnpm
pnpm start:http
# Or using bun
bun run start:http
O servidor iniciará em http://localhost:3000 e fornecerá:
- Endpoint SSE:
/sse - Endpoint de mensagens:
/messages
Uso em Testes
Você pode iniciar e parar programaticamente o servidor mcp-hello-world dentro do seu framework de testes (como Jest, Vitest, Mocha, etc.) para testes automatizados.
Exemplo: Testando com Modo STDIO (Node.js)
// test/my-mcp-client.test.ts (Example using Jest)
import { spawn } from 'child_process';
import { MCPClient } from '../src/my-mcp-client'; // Assuming this is your client code
describe('My MCP Client (STDIO)', () => {
let mcpServerProcess;
let client: MCPClient;
beforeAll(() => {
// Start the mcp-hello-world process before tests
// Using npx (or pnpm dlx / bunx) ensures the command is found and executed
mcpServerProcess = spawn('npx', ['mcp-hello-world']);
// Instantiate your client and connect to the subprocess's stdio
client = new MCPClient(mcpServerProcess.stdin, mcpServerProcess.stdout);
});
afterAll(() => {
// Shut down the mcp-hello-world process after tests
mcpServerProcess.kill();
});
it('should receive echo response', async () => {
const request = {
jsonrpc: '2.0',
id: 1,
method: 'tools/invoke',
params: { name: 'echo', parameters: { message: 'test message' } },
};
const response = await client.sendRequest(request); // Assuming your client has this method
expect(response).toEqual({
jsonrpc: '2.0',
id: 1,
result: { content: [{ type: 'text', text: 'Hello test message' }] },
});
});
it('should get greeting resource', async () => {
const request = {
jsonrpc: '2.0',
id: 2,
method: 'resources/get',
params: { uri: 'greeting://Alice' },
};
const response = await client.sendRequest(request);
expect(response).toEqual({
jsonrpc: '2.0',
id: 2,
result: { data: 'Hello Alice!' }, // Confirm return format based on actual implementation
});
});
// ... other test cases
});
Exemplo: Testando com Modo HTTP/SSE
Para HTTP/SSE, você pode precisar:
- Usar
execouspawnembeforeAllpara iniciarpnpm start:httpoubun run start:http. - Usar um cliente HTTP (como
axios,node-fetchou o cliente integrado do seu framework de testes) para conectar-se ahttp://localhost:3000/ssee/messagespara testes. - Garantir que você encerre o processo do servidor iniciado em
afterAll.
Capacidades MCP Fornecidas (para Asserções de Teste)
mcp-hello-world fornece as seguintes capacidades fixas para interação e asserção em seus testes:
Recursos
hello://world- Descrição: Um recurso estático Hello World.
- Método:
resources/get - Parâmetros: Nenhum
- Retorna:
{ data: 'Hello World!' }
greeting://{name}- Descrição: Um recurso de saudação dinâmico.
- Método:
resources/get - Parâmetros:
nameincluído no URI, por exemplo,greeting://Bob. - Retorna:
{ data: 'Hello {name}!' }(por exemplo,{ data: 'Hello Bob!' })
Ferramentas
echo- Descrição: Ecoa a mensagem de entrada, prefixada com "Hello ".
- Método:
tools/invoke - Parâmetros:
{ name: 'echo', parameters: { message: string } } - Retorna:
{ content: [{ type: 'text', text: 'Hello {message}' }] }(por exemplo,{ content: [{ type: 'text', text: 'Hello test' }] })
debug- Descrição: Lista todas as definições de métodos MCP disponíveis no servidor.
- Método:
tools/invoke - Parâmetros:
{ name: 'debug', parameters: {} } - Retorna: Uma estrutura JSON contendo definições para todos os recursos, ferramentas e prompts registrados.
Prompts
helpful-assistant- Descrição: Uma definição básica de prompt de assistente.
- Método:
prompts/get - Parâmetros: Nenhum
- Retorna: Uma estrutura JSON para o prompt com papéis predefinidos de
systemeuser.
Licença
MIT