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
⚠️ 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çãosearch-typeahead- Busca com debouncepolling- Polling inteligente com backoffwebsocket-reconnect- WebSocket com reconexão automáticaform-validation- Validação de formulário reativastate-management- Armazenamento de estado simplescache-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 comunsstrict— as 28 regras dostrictdo 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()outakeUntil(destroy$)em componentes - React — Detecta
subscribe()sem limpeza deuseEffect - Vue — Detecta
subscribe()sem limpeza deonUnmounted
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ível | Fonte | Propósito | Legível por IA? |
|---|---|---|---|
| Oficial | rxjs.dev | Referência de API autoritativa para humanos | ❌ (SPA) |
| Fonte | GitHub (tag 7.8.2) | JSDoc + implementação — o contexto mais rico para IA | ✅ |
| Guia | RxJS-with-TypeScript | Explicações bilíngues JP/EN com exemplos práticos | ✅ |
Por que incluir o guia comunitário junto com a documentação oficial?
-
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.
-
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. -
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:
officialUrl— sempre exibido (autoridade, legível por humanos)sourceUrl— exibido quando disponível (a IA deve ler isto)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