rxjs-mcp-server

Execute, depurar e visualizar streams RxJS diretamente de assistentes de IA como Claude.

Documentação

Servidor MCP RxJS

README em japonês disponível aqui

npm version npm downloads license Node.js

CI Release Provenance Trusted Publisher

TypeScript RxJS MCP PRs welcome

⚠️ Este é um projeto comunitário não oficial, não afiliado à equipe RxJS.

Execute, depure e visualize streams RxJS diretamente de assistentes de IA como o Claude.

Recursos

🚀 Execução de Streams

  • Execute código RxJS e capture emissões
  • Visualização de linha do tempo com carimbos de data/hora
  • Rastreamento de uso de memória
  • Suporte a todos os principais operadores RxJS

📊 Diagramas de Mármore

  • Gere diagramas de mármore em ASCII
  • Visualize o comportamento do stream ao longo do tempo
  • Detecção automática de padrões
  • Legenda e explicações claras

🔍 Análise de Operadores

  • Analise cadeias de operadores para desempenho
  • Detecte possíveis problemas e gargalos
  • Sugira abordagens alternativas
  • Categorize operadores por função

🛡️ Detecção de Vazamento de Memória

  • Identifique assinaturas não canceladas
  • Detecte padrões de limpeza ausentes
  • Recomendações específicas por framework (Angular, React, Vue)
  • Forneça exemplos adequados de limpeza

💡 Sugestões de Padrões

  • Obtenha padrões RxJS testados em produção
  • Implementações específicas por framework
  • Casos de uso comuns cobertos:
    • Repetição de HTTP com backoff
    • Busca com digitação antecipada (typeahead)
    • Reconexão de WebSocket
    • Validação de formulários
    • Gerenciamento de estado
    • E muito mais...

Instalação

Requisitos

  • Node.js >= 22 (engines.node). O SDK TypeScript MCP v2 no qual este servidor é construído requer Node.js >= 20; este pacote define um limite mínimo mais alto para permanecer em uma linha LTS mantida.
# Install globally
npm install -g @shuji-bonji/rxjs-mcp

# Or use with npx
npx @shuji-bonji/rxjs-mcp

Configuração

Claude Desktop

Adicione em ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "rxjs": {
      "command": "npx",
      "args": ["@shuji-bonji/rxjs-mcp"]
    }
  }
}

VS Code com Continue/Copilot

Adicione em .vscode/mcp.json:

{
  "mcpServers": {
    "rxjs": {
      "command": "npx",
      "args": ["@shuji-bonji/rxjs-mcp"]
    }
  }
}

Cursor

Adicione em ~/.cursor/mcp.json:

{
  "mcpServers": {
    "rxjs": {
      "command": "npx",
      "args": ["@shuji-bonji/rxjs-mcp"]
    }
  }
}

Ferramentas Disponíveis

execute_stream

Execute código RxJS e capture emissões do stream com linha do tempo.

A ferramenta aceita uma expressão que avalia para um Observable, ou um trecho que termina em tal expressão — return é opcional.

// ✅ Trailing expression (v0.2.0+): the last expression is returned implicitly
interval(100).pipe(
  take(5),
  map((x) => x * 2),
);

// ✅ Declaration + trailing reference
const stream$ = interval(100).pipe(
  take(5),
  map((x) => x * 2),
);
stream$;

// ✅ Explicit return (always works)
return interval(100).pipe(
  take(5),
  map((x) => x * 2),
);

generate_marble

Gere diagramas de mármore em ASCII a partir de dados de eventos.

// Input: array of timed events
[
  { time: 0, value: 'A' },
  { time: 50, value: 'B' },
  { time: 100, value: 'C' },
];

// Output: A----B----C--|

analyze_operators

Analise cadeias de operadores RxJS para desempenho e boas práticas.

// Analyzes chains like:
source$.pipe(
  map((x) => x * 2),
  filter((x) => x > 10),
  switchMap((x) => fetchData(x)),
  retry(3),
);

detect_memory_leak

Detecte possíveis vazamentos de memória e limpeza ausente.

// Detects issues like:
- Missing unsubscribe
- No takeUntil operator
- Uncompleted Subjects
- Infinite intervals

suggest_pattern

Obtenha padrões prontos para produção para casos de uso comuns.

Padrões disponíveis:

  • http-retry - HTTP resiliente com repetição
  • search-typeahead - Busca com debounce
  • polling - Polling inteligente com backoff
  • websocket-reconnect - WebSocket com reconexão automática
  • form-validation - Validação de formulário reativa
  • state-management - Armazenamento de estado simples
  • cache-refresh - Cache com estratégia de atualização
  • E muito mais...

lint_rxjs

Execute lint em trechos de código RxJS para problemas comuns e boas práticas. Baseado nas regras do eslint-plugin-rxjs-x.

// Parameters:
{
  code: string;           // RxJS code to lint
  config?: 'recommended' | 'strict';  // Rule set (default: recommended)
  framework?: 'angular' | 'react' | 'vue' | 'none'; // Framework context
  rules?: string[];       // Specific rules to check (overrides config)
}

Níveis de configuração:

  • recommended — 20 regras cobrindo os problemas mais comuns
  • strict — as 28 regras do strict do eslint-plugin-rxjs-x (no-exposed-subjects, no-misused-observables, no-unnecessary-collection, etc.)

finnish não está em nenhuma das configurações, correspondendo ao plugin, e é executado apenas quando nomeado: rules: ["finnish"]. Verificações específicas por framework são adicionadas além de ambos os níveis.

Verificações específicas por framework:

  • Angular — Detecta ausência de takeUntilDestroyed() ou takeUntil(destroy$) em componentes
  • React — Detecta subscribe() sem limpeza de useEffect
  • Vue — Detecta subscribe() sem limpeza de onUnmounted

Exemplos de Uso

Com Claude

User: "Execute this RxJS stream and show me the output"

Claude: I'll execute that RxJS stream for you.

[Uses execute_stream tool]

## Stream Execution Result
✅ Completed
Execution Time: 523ms
Values Emitted: 5

### Emitted Values
[0, 2, 4, 6, 8]

Depurando Vazamentos de Memória

User: "Check this Angular component for memory leaks"

Claude: I'll analyze your component for potential memory leaks.

[Uses detect_memory_leak tool]

## Memory Leak Analysis
⚠️ Potential leaks detected

1. 🔴 subscription (high severity)
   - Found 3 subscribe() calls but only 1 unsubscribe()
   - Fix: Use takeUntil pattern with destroy$ subject

Obtendo Padrões

User: "Show me how to implement search with RxJS"

Claude: I'll show you the search typeahead pattern.

[Uses suggest_pattern tool with useCase: 'search-typeahead']

## Search Typeahead with Debounce
[Full implementation with explanation]

Segurança

A ferramenta execute_stream executa código fornecido pelo usuário em uma thread Worker isolada para evitar:

  • Poluição do processo principal
  • Vazamentos de recursos por loops infinitos ou temporizadores
  • Acesso a APIs Node.js sensíveis (process, fs, etc.)

A execução é encerrada à força se exceder o tempo limite configurado.

Desenvolvimento

# Clone the repository
git clone https://github.com/shuji-bonji/rxjs-mcp-server
cd rxjs-mcp-server

# Install dependencies
npm install

# Build
npm run build

# Run tests
npm test              # Unit tests (vitest)
npm run test:mcp      # MCP integration test
npm run test:inspector # MCP Inspector (GUI)

# Run in development
npm run dev

Lançamento

Os lançamentos são automatizados via GitHub Actions e publicados no npm usando Trusted Publisher (OIDC) — nenhum token estático é usado, e cada lançamento carrega uma atestação de proveniência do npm. Consulte RELEASING.md para o fluxo de trabalho completo (e configuração inicial do npm).

Integração com Outros Servidores MCP

O Servidor MCP RxJS funciona muito bem junto com:

  • Angular MCP - Para scaffolding de projetos Angular
  • TypeScript MCP - Para verificação de tipos
  • ESLint MCP - Para qualidade de código

A futura integração Meta-MCP permitirá coordenação perfeita entre essas ferramentas.

Arquitetura

┌─────────────────┐
│   AI Assistant  │
│   (Claude, etc) │
└────────┬────────┘
         │
    MCP Protocol
         │
┌────────┴────────┐
│  RxJS MCP Server│
├─────────────────┤
│ • execute_stream│
│ • generate_marble│
│ • analyze_operators│
│ • detect_memory_leak│
│ • suggest_pattern│
│ • lint_rxjs      │
└─────────────────┘

O servidor é construído sobre o SDK TypeScript MCP v2 (@modelcontextprotocol/server@^2.0.0, revisão de protocolo 2026-07-28). Ele fala apenas stdio: src/index.ts entrega a fábrica createServer() em src/server.ts para serveStdio(), que também atende clientes que ainda falam as revisões de protocolo de 2025.

Sistema de Referência de Documentação

Desde a v0.3.0, analyze_operators gera links de documentação em três níveis para cada operador e função de criação:

NívelFontePropósitoLegível por IA?
Oficialrxjs.devReferência de API autoritativa para humanos❌ (SPA)
FonteGitHub (tag 7.8.2)JSDoc + implementação — o contexto mais rico para IA✅
GuiaRxJS-with-TypeScriptExplicações bilíngues JP/EN com exemplos práticos✅

Por que incluir o guia comunitário junto com a documentação oficial?

  1. rxjs.dev é um SPA renderizado no cliente. Assistentes de IA não conseguem buscar seu conteúdo — requisições HTTP retornam um shell vazio com carregadores JavaScript. O site oficial é, portanto, um "link para entregar a humanos", não uma fonte que a IA possa ler.

  2. O código-fonte no GitHub fornece a verdade bruta. O código-fonte do RxJS (fixado na tag 7.8.2) contém JSDoc, assinaturas de tipo e detalhes de implementação. Esta é a referência primária para assistentes de IA.

  3. O guia bilíngue adiciona contexto de aprendizado. Ele organiza operadores por caso de uso (não apenas alfabeticamente), fornece exemplos executáveis e oferece traduções para o japonês. Para usuários ou aprendizes que falam japonês, isso preenche uma lacuna que nem rxjs.dev nem o código-fonte bruto abordam.

Ordem de prioridade

Quando o servidor MCP gera referências, ele segue esta prioridade:

  1. officialUrl — sempre exibido (autoridade, legível por humanos)
  2. sourceUrl — exibido quando disponível (a IA deve ler isto)
  3. guideUrl — exibido quando a página existe (suplementar)

Se uma página de guia ainda não existir para um operador, o campo é simplesmente omitido (sem link quebrado). A cobertura é rastreada pelo CI de validação de URL.

Posso desativar as referências do guia?

Atualmente não há opção em tempo de execução para excluir guideUrl da saída. Se você preferir referências apenas oficiais, pode fazer um fork deste servidor ou abrir uma solicitação de recurso. Uma versão futura pode suportar um sinalizador --references=official,source.

Contribuindo

Contribuições são bem-vindas! Sinta-se à vontade para enviar um PR.

Licença

MIT

Autor

Shuji Bonji

Links