lucianoyamane/poc-mcp-server
If you are the rightful owner of poc-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
This project is a proof of concept for a Model Context Protocol (MCP) server that integrates with the public API deckofcardsapi.com to manage card decks, shuffle, draw cards, manipulate piles, and interact via prompts.
criar_baralho
Creates a new deck of cards.
embaralhar_baralho
Shuffles an existing deck.
comprar_cartas
Draws cards from a deck.
adicionar_pilha
Adds cards to a pile in a deck, creating the pile if it doesn't exist.
embaralhar_pilha
Shuffles a specific pile in a deck.
poc-mcp-server
Descrição
Este projeto é uma prova de conceito de um servidor MCP (Model Context Protocol) que integra com a API pública deckofcardsapi.com para criar, embaralhar, comprar cartas de baralhos, manipular pilhas e interagir via prompts. O projeto está modularizado para facilitar manutenção e extensões.
Observação sobre a abordagem manual (baixo nível) do MCP
Nota: Este projeto utiliza a API de baixo nível do MCP SDK (
Server
esetRequestHandler
) ao invés das abstrações de alto nível (McpServer
,server.tool
, etc). Isso foi necessário para garantir controle total sobre o registro de tools, resources, templates e prompts, além de compatibilidade com o Inspector e outros clients MCP. Essa abordagem é ideal para provas de conceito, debugging e cenários que exigem customização avançada.Para mais detalhes, consulte o arquivo .
Estrutura do Projeto
index.js
: Ponto de entrada do servidor MCP. Registra as ferramentas (tools), resources dinâmicos e prompts.handlers.js
: Contém as funções (handlers) que implementam a lógica de cada ferramenta.schemas.js
: Define os schemas de validação dos parâmetros usando Zod.toolsMeta.js
: Centraliza os nomes e descrições das ferramentas..env
: Arquivo de variáveis de ambiente (exemplo: URL base da API de baralhos).test.js
: Script de teste automatizado para validar as ferramentas.client/
: Client MCP CLI para interagir com o servidor.docs/
: Documentação e problemas conhecidos.
Instalação
- Clone o repositório:
git clone <url-do-repo> cd poc-mcp-server-deck-of-cards
- Instale as dependências:
npm install
- Crie um arquivo
.env
na raiz do projeto (opcional):DECK_API_BASE_URL=https://deckofcardsapi.com/api/deck
Como rodar o servidor
npm start
O servidor MCP será iniciado e aguardará comandos via transporte STDIO.
Como rodar os testes
npm test
O script test.js
irá:
- Criar um baralho
- Comprar cartas do baralho
- Simular a lógica de prompt como uma tool
Como funciona
- As ferramentas (tools), resources e prompts são registrados manualmente usando o modelo baixo nível do MCP Server.
- Os handlers implementam a lógica de integração com a API deckofcardsapi.com.
- Os schemas garantem a validação dos parâmetros recebidos.
- O projeto utiliza dotenv para configuração flexível da URL base da API.
Tools disponíveis
criar_baralho
: Cria um novo baralho de cartas.embaralhar_baralho
: Embaralha um baralho existente.comprar_cartas
: Compra cartas de um baralho.adicionar_pilha
: Adiciona cartas a uma pilha de um baralho (cria a pilha se não existir).embaralhar_pilha
: Embaralha uma pilha específica de um baralho.
Exemplo de uso da tool adicionar_pilha
{
"deck_id": "c7ji4ar6dxti",
"pile_name": "teste",
"cards": "AS,2S"
}
Resources dinâmicos
O servidor expõe um resource dinâmico para listar as cartas de uma pilha específica de um baralho:
- Template:
deck://{deckId}/pile/{pileName}/list
- Como usar:
- Preencha os parâmetros
deckId
epileName
para montar a URI, por exemplo:deck://c7ji4ar6dxti/pile/teste/list
- Consulte esse resource pelo client MCP ou pelo inspector.
- Preencha os parâmetros
Prompts MCP
O servidor expõe prompts para padronizar interações e facilitar fluxos conversacionais com LLMs. Os prompts disponíveis são:
- explicar-regras: Explica as regras de um jogo de cartas.
- Argumentos:
jogo
(nome do jogo de cartas) - Exemplo:
{ "jogo": "pôquer" }
- Argumentos:
- sugerir-jogada: Sugere a melhor jogada com base nas cartas informadas.
- Argumentos:
cartas
(ex: "AS, KD, 10H, 9C") - Exemplo:
{ "cartas": "AS, KD, 10H, 9C" }
- Argumentos:
- simular-partida: Simula uma partida de um jogo de cartas com N jogadores.
- Argumentos:
jogo
,jogadores
- Exemplo:
{ "jogo": "blackjack", "jogadores": 3 }
- Argumentos:
- mensagem-personalizada: Gera uma mensagem de boas-vindas ou parabéns para um jogador.
- Argumentos:
nome
,tipo
(ex: "boas-vindas", "parabéns") - Exemplo:
{ "nome": "João", "tipo": "boas-vindas" }
- Argumentos:
Como testar prompts
- No MCP Inspector, acesse a aba Prompts.
- Escolha um prompt, preencha os argumentos e veja a mensagem gerada.
- Você pode integrar prompts em fluxos de LLMs para padronizar perguntas e respostas.
Testando com o MCP Inspector
Você pode testar o servidor e suas capabilities com o MCP Inspector:
npx @modelcontextprotocol/inspector node index.js
Ou, se preferir, utilize o script já definido no package.json
:
npm run inspector
- Acesse a aba Tools para testar as ferramentas disponíveis.
- Acesse a aba Resource Templates para testar o resource dinâmico, preenchendo os parâmetros necessários.
- Acesse a aba Prompts para testar prompts e gerar mensagens customizadas.
Client MCP (CLI)
O projeto inclui um client MCP em Node.js na pasta client
, que permite interagir com o servidor MCP via linha de comando, utilizando o modelo Claude (Anthropic) para processar linguagem natural e acionar ferramentas do servidor.
Instalação das dependências do client
cd client
npm install
Configuração
Crie um arquivo .env
na pasta client
com sua chave da API do Anthropic:
ANTHROPIC_API_KEY=sua-chave-aqui
Como executar o client
Com o servidor MCP rodando, execute o client passando o caminho do script do servidor MCP (por exemplo, ../index.js
):
node index.js <caminho_para_o_servidor_MCP>
Exemplo:
node index.js ../index.js
Funcionamento
- O client conecta ao servidor MCP via transporte STDIO.
- Permite enviar queries em linguagem natural, que são processadas pelo Claude.
- Para sair, digite
quit
no prompt. - Para listar as tools disponíveis, digite
resources
outools
(dependendo do comando implementado). - Para consumir um resource dinâmico, digite:
resource deck://<deck_id>/pile/<pile_name>/list
Exemplo de uso
$ node index.js ../index.js
MCP Client Started!
Type your queries, 'resources' to listar resources, or 'quit' to exit.
Query: Quero criar um baralho e comprar 5 cartas.
[resposta do modelo com o resultado das operações]
Query: resource deck://c7ji4ar6dxti/pile/teste/list
[resposta com as cartas da pilha 'teste']
Obs: O client pode ser adaptado para outros modelos ou interfaces conforme necessário.
Observações sobre prompt
- O suporte a prompts reais depende de um client MCP com interface humana (chat, web, etc).
- No momento, a lógica de prompt está simulada como uma tool para facilitar testes automatizados.
Dependências principais
@modelcontextprotocol/sdk
dotenv
node-fetch
zod
Customização
- Para adicionar novas ferramentas ou prompts, edite o handler correspondente no
index.js
. - Para mudar a URL da API, edite o arquivo
.env
.
Problemas conhecidos
Consulte a pasta docs/
para problemas conhecidos e dicas de solução.
Se tiver dúvidas ou quiser expandir o projeto, fique à vontade para contribuir!
Exemplo de uso: Simulando uma jogada de pôquer
Abaixo está um exemplo de prompt em linguagem natural para simular uma jogada de pôquer Texas Hold'em utilizando o servidor MCP:
Eu gostaria de simular um jogo de pôquer Texas Hold'em com 4 jogadores, onde cada jogador recebe duas cartas e 5 cartas comunitárias são reveladas na mesa.
Esse prompt solicita ao servidor MCP que:
- Crie um baralho novo
- Embaralhe o baralho
- Distribua 2 cartas para cada um dos 4 jogadores
- Revele 5 cartas comunitárias na mesa (como no Texas Hold'em)
A resposta esperada será um objeto JSON contendo as cartas de cada jogador e as cartas da mesa, por exemplo:
{
"jogadores": {
"jogador_1": ["AS", "KD"],
"jogador_2": ["10H", "9C"],
"jogador_3": ["2D", "7S"],
"jogador_4": ["JC", "5H"]
},
"mesa": ["3C", "8D", "QS", "4H", "6S"]
}
Obs: Você pode adaptar o prompt em linguagem natural conforme desejar, mudando o número de jogadores ou o formato da partida.