Skip to main content
Glama
won3er

mermaid-mcp

by won3er
README.md
# MCP Server Básico

Servidor [Model Context Protocol (MCP)](https://modelcontextprotocol.io) de exemplo, escrito em TypeScript e Node.js, usando o SDK oficial `@modelcontextprotocol/sdk`.

> 📖 **Nunca usou MCP?** Siga o **[Guia de Uso passo a passo](GUIA-DE-USO.md)** — do zero até usar no Claude Desktop, sem precisar saber programar.

## Capacidades

| Tipo     | Nome        | Descrição                                                        |
|----------|-------------|------------------------------------------------------------------|
| Tool     | `hello`     | Recebe `name` e retorna `Olá, <name>!`                            |
| Resource | `info`      | `resource://info` — texto explicando o servidor                   |
| Prompt   | `assistant` | Recebe `topic` e gera um prompt de sistema sobre esse tema        |

## Estrutura do projeto

```
mermaid MCP/
├── src/
│   ├── index.ts              # Ponto de entrada: cria o servidor e conecta via stdio
│   ├── tools/
│   │   └── hello.ts          # Tool "hello"
│   ├── resources/
│   │   └── info.ts           # Resource "info" (resource://info)
│   └── prompts/
│       └── assistant.ts      # Prompt "assistant"
├── package.json
├── tsconfig.json
└── README.md
```

## Arquitetura

```mermaid
graph TD
    Claude["Cliente Claude<br/>(Claude Desktop)"]
    Server["MCP Server<br/>(index.ts — stdio / JSON-RPC 2.0)"]

    Tools["Tools<br/>(src/tools/)"]
    Resources["Resources<br/>(src/resources/)"]
    Prompts["Prompts<br/>(src/prompts/)"]

    Hello["hello<br/>name → 'Olá, name!'"]
    Info["info<br/>resource://info"]
    Assistant["assistant<br/>topic → prompt de sistema"]

    Claude -- "tools/call" --> Server
    Claude -- "resources/read" --> Server
    Claude -- "prompts/get" --> Server

    Server --> Tools
    Server --> Resources
    Server --> Prompts

    Tools --> Hello
    Resources --> Info
    Prompts --> Assistant

    Hello -. "resposta (content)" .-> Server
    Info -. "resposta (contents)" .-> Server
    Assistant -. "resposta (messages)" .-> Server
    Server -. "resultado JSON-RPC" .-> Claude
```

### Fluxo de uma chamada de Tool

```mermaid
sequenceDiagram
    participant Claude as Cliente Claude
    participant Server as MCP Server
    participant Tool as Tool "hello"

    Claude->>Server: initialize
    Server-->>Claude: capabilities (tools, resources, prompts)
    Claude->>Server: notifications/initialized

    Claude->>Server: tools/call { name: "hello", arguments: { name: "Maria" } }
    Server->>Tool: valida input (Zod) e executa handler
    Tool-->>Server: { content: [{ type: "text", text: "Olá, Maria!" }] }
    Server-->>Claude: resposta JSON-RPC com o resultado
```

## Requisitos

- Node.js 18 ou superior

## Instalação

```bash
npm install
```

## Desenvolvimento

Executa direto do TypeScript, sem compilar (via `tsx`):

```bash
npm run dev
```

## Build e execução

```bash
npm run build   # compila TypeScript para ./build
npm start       # executa node build/index.js
```

O servidor se comunica por **stdio** (stdin/stdout com JSON-RPC 2.0). Ele não abre porta HTTP — quem o inicia é o cliente MCP (ex.: Claude Desktop).

## Testando manualmente

Com o [MCP Inspector](https://github.com/modelcontextprotocol/inspector):

```bash
npx @modelcontextprotocol/inspector node build/index.js
```

## Conectando ao Claude Desktop

1. Compile o projeto: `npm run build`
2. Abra o arquivo de configuração do Claude Desktop:
   - **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
   - **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
3. Adicione o servidor (ajuste o caminho absoluto):

```json
{
  "mcpServers": {
    "mcp-server-basico": {
      "command": "node",
      "args": [
        "C:\\CAMINHO\\ATE\\O\\PROJETO\\mermaid-mcp\\build\\index.js"
      ]
    }
  }
}
```

4. Reinicie o Claude Desktop. O servidor aparecerá no menu de ferramentas (ícone 🔌 / "Search and tools").

Depois disso você pode pedir, por exemplo: *"Use a tool hello com o nome Maria"*.

## Adicionando novas Tools

1. Crie um arquivo em `src/tools/`, exportando uma função `registerXxxTool(server)`.
2. Dentro dela, chame `server.registerTool(nome, config, handler)`.
3. Importe e chame a função em `src/index.ts`.
4. Rode `npm run build` e reinicie o cliente MCP.

TDQS

B3.4/5.0

Scored across 1 tool

Disambiguation5/5

Only one tool exists, so there is no risk of confusion or overlapping purposes.

Naming Consistency5/5

With a single tool, naming consistency is inherently perfect.

Tool Count1/5

A server named 'mermaid-mcp' with just one trivial greeting tool is an extreme mismatch between scope and tool count.

Completeness1/5

The tool set is severely incomplete for the implied domain of mermaid diagram generation or manipulation, as it only offers a greeting function.

Maintenance

ActivityMaintained
ResponsivenessSyncing