{"id":"91663800-b7d3-4272-bade-98780de872d1","slug":"mcp-omnimatch","kind":"mcp","name":"mcp-OmniMatch","summary":"","owner":"JeisonSilva","repoUrl":"https://github.com/JeisonSilva/mcp-OmniMatch","license":"MIT","licenseTier":"permissive","trust":"community","stars":4,"match":null,"fewStars":true,"format":"mcp","createdAt":"2026-05-04T12:06:45.000Z","addedAt":"2026-10-21T17:19:00.729Z","logoUrl":"https://avatars.githubusercontent.com/u/20734120?u=3c81b0e6c79de99031ea5aad424936a38f9bc2b8&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["utilities"],"tags":[],"runtime":"node","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-26T01:16:09.106Z","sample":false,"url":"https://conduits.dev/tools/mcp-omnimatch","language":"TypeScript","transports":["stdio"],"install":{"npm":"mcp-omnimatch"},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# mcp-OmniMatch\n\n**MCP Integration Orchestrator** — transforms Claude / Cursor into an integration engineer that maps Angular screens to .NET Web API endpoints and evaluates their compatibility.\n\n> Zero LLM cost. The model does the reasoning; mcp-OmniMatch holds the state.\n\n---\n\n## How it works\n\n```\nUser pastes Angular HTML/TS  ──▶  LLM extracts schema  ──▶  upsert_frontend_schema\nUser pastes C# controller    ──▶  LLM extracts schema  ──▶  upsert_backend_schema\n                                                               │\n                                                        ContextStore (in-memory)\n                                                               │\n                              ◀──  get_full_context  ◀────────┘\n                                        │\n                              LLM performs compatibility analysis\n                                        │\n                              Compatibility report + integration guide\n```\n\nThe MCP server is a **stateful middleware**: it accumulates extracted schemas across multiple tool calls so the LLM can perform a meaningful cross-schema analysis without hitting context limits or relying on conversation memory.\n\n---\n\n## Tools\n\n| Tool | Descrição |\n|---|---|\n| `generate_mapping_prompt` | Retorna o guia de extração passo a passo para arquivos Angular ou .NET. Chame primeiro. |\n| `upsert_frontend_schema` | Armazena/atualiza o mapa de campos de uma tela Angular. |\n| `upsert_backend_schema` | Armazena/atualiza o mapa de rotas de um controller .NET. |\n| `get_full_context` | Retorna o estado completo (frontend + backend) para a análise final. |\n| `gerar_relatorio` | Gera `relatorio-compatibilidade.md` e `plano-integracao.md` a partir da análise da LLM. |\n| `clear_context` | Limpa o store para iniciar uma nova sessão sem reiniciar o servidor. |\n\n---\n\n## Compatibility checks the LLM performs\n\nAfter `get_full_context`, instruct the model to evaluate:\n\n- **Type alignment** — `string` (C#) vs `string` (TS) → 100 %. `decimal` vs `number` → verify precision.\n- **Naming conventions** — `customer_id` (snake_case) vs `customerId` (camelCase) → serialization warning.\n- **Missing fields** — \"The screen sends `birthDate` but no endpoint DTO accepts it.\"\n- **HTTP status handling** — \"The API returns `201 Created` on POST; does the Angular service check for 201 or only 200?\"\n- **Nullable mismatches** — C# `string?` not null-checked on the Angular side.\n- **Extra fields** — \"The API response contains `internalAuditId`; the screen never reads it.\"\n\n---\n\n## Project structure\n\n```\nmcp-OmniMatch/\n├── src/\n│   ├── server.ts               # Entry point MCP (StdioTransport)\n│   ├── tools/\n│   │   ├── frontend.ts         # upsert_frontend_schema\n│   │   ├── backend.ts          # upsert_backend_schema\n│   │   ├── context.ts          # get_full_context · generate_mapping_prompt · clear_context\n│   │   └── reports.ts          # gerar_relatorio → dois arquivos Markdown\n│   ├── state/\n│   │   └── store.ts            # ContextStore SQLite + interfaces de domínio\n│   └── prompts/\n│       └── guides.ts           # Guias de extração (pt-BR)\n├── data/\n│   └── omnimatch.db            # Banco SQLite (criado automaticamente, git-ignored)\n├── reports/                    # Relatórios gerados (git-ignored)\n│   ├── relatorio-compatibilidade-YYYY-MM-DD.md\n│   └── plano-integracao-YYYY-MM-DD.md\n├── tsconfig.json               # Apenas para editor/IDE (noEmit — Node 24 roda .ts direto)\n├── claude_desktop_config.example.json\n├── package.json\n└── README.md\n```\n\n> **Runtime:** Node.js 24+ runs `.ts` files natively without compilation. No `tsc`, no build step.  \n> `tsconfig.json` exists only for IDE type-checking (`noEmit: true`).\n\n---\n\n## Installation\n\n```bash\ngit clone https://github.com/jeisonsilva/mcp-OmniMatch.git\ncd mcp-OmniMatch\nnpm install\n```\n\n---\n\n## Claude Desktop configuration\n\nCopy `claude_desktop_config.example.json` and merge it into your Claude Desktop config file:\n\n**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`  \n**Windows:** `%APPDATA%\\Claude\\claude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"mcp-OmniMatch\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/mcp-OmniMatch/src/server.ts\"],\n      \"env\": {\n        \"NODE_ENV\": \"development\"\n      }\n    }\n  }\n}\n```\n\nRestart Claude Desktop. The five mcp-OmniMatch tools will appear in the tool list.\n\n---\n\n## Cursor configuration\n\nAdd to `.cursor/mcp.json` in your project root (or the global `~/.cursor/mcp.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"mcp-OmniMatch\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/mcp-OmniMatch/src/server.ts\"]\n    }\n  }\n}\n```\n\n---\n\n## Typical session\n\n```\nYou: Use mcp-OmniMatch to help me check if my login screen matches the auth API.\n\nClaude: I'll start by fetching the extraction guides.\n  → generate_mapping_prompt({ type: \"angular\" })\n  → [guide returned]\n\n  Paste your Angular login component (HTML + TS).\n\nYou: [pastes LoginComponent.html and login.component.ts]\n\nClaude: Extracting fields…\n  → upsert_frontend_schema({ screen_id: \"login-screen\", elements: [...] })\n\n  Now paste your C# AuthController.\n\nYou: [pastes AuthController.cs]\n\nClaude: Extracting endpoints…\n  → generate_mapping_prompt({ type: \"dotnet\" })\n  → upsert_backend_schema({ controller_id: \"AuthController\", routes: [...] })\n\n  Running compatibility analysis…\n  → get_full_context()\n\n  ## Compatibility Report — login-screen × AuthController\n\n  | Field       | Frontend type | Backend type | Status  |\n  |-------------|---------------|--------------|---------|\n  | email       | string        | string       | ✅ OK   |\n  | password    | string        | string       | ✅ OK   |\n  | rememberMe  | boolean       | —            | ⚠️ Not in DTO |\n\n  POST /api/auth/login returns 200 — Angular service checks for 200. ✅\n  No birthDate field mismatch detected.\n```\n\n---\n\n## Known limitations\n\n- **Not a live watcher** — mcp-OmniMatch does not detect file changes automatically. Re-run `upsert_*` tools after editing source files.\n- **ReactiveForm depth** — complex nested `FormGroup` hierarchies may be partially captured if the LLM misses nested `formControlName` bindings. The Angular extraction guide instructs the model to look for these explicitly.\n- **External DTOs** — if a C# DTO is defined in a separate file that is not provided, the tool records it as `\"<ExternalDto>\"`. Provide both files for full analysis.\n- **Persistência entre reinicializações** — schemas armazenados em `data/omnimatch.db` (SQLite, WAL). Use `clear_context` para iniciar nova sessão.\n- **Caminho do banco configurável** — variável `OMNIMATCH_DB_PATH` redireciona o arquivo `.db` para outro local.\n- **Caminho dos relatórios configurável** — variável `OMNIMATCH_REPORTS_PATH` define onde os arquivos Markdown serão salvos (padrão: `reports/` na raiz do projeto). O parâmetro `diretorio_saida` da ferramenta sobrepõe a variável por chamada.\n"}