{
  "markdown": "# mcp-stack\n\nFourteen small MCP servers for everyday LLM / RAG / agent work. Each ships\nindependently on npm, listed in the [official MCP Registry](https://registry.modelcontextprotocol.io),\nand is callable from Claude Desktop, Cursor, Cline, Windsurf, Zed, and any\nother MCP-compatible client.\n\n## RAG / agent helpers\n\n| Package | Tools | When to install |\n|---|---|---|\n| [`@mukundakatta/promptbudget-mcp`](./packages/promptbudget-mcp/) | `truncate_to_token_budget` | LLM needs to fit text into a context window mid-task |\n| [`@mukundakatta/citecite-mcp`](./packages/citecite-mcp/) | `inject_citations`, `parse_citations`, `strip_citations` | Round-trip `[1] [2]` markers in RAG outputs |\n| [`@mukundakatta/ragmetric-mcp`](./packages/ragmetric-mcp/) | `recall_at_k`, `hit_at_k`, `mrr`, `ndcg_at_k`, `evaluate_batch` | LLM helps score retrieval quality |\n| [`@mukundakatta/ragdrift-mcp`](./packages/ragdrift-mcp/) | `interpret_drift_score`, `recommend_thresholds`, `explain_drift_dimensions` | LLM diagnoses RAG drift alerts |\n\n## Reliable transforms LLMs reach for tools instead of imagining\n\n| Package | Tools | When to install |\n|---|---|---|\n| [`@mukundakatta/csv-tools-mcp`](./packages/csv-tools-mcp/) | `parse_csv`, `to_csv`, `pluck_columns` | LLM needs RFC 4180-correct CSV (quoted fields, embedded commas, BOMs) |\n| [`@mukundakatta/regex-test-mcp`](./packages/regex-test-mcp/) | `test_regex`, `find_all`, `replace` | LLM needs exact regex semantics with real match offsets and named groups |\n| [`@mukundakatta/jmespath-mcp`](./packages/jmespath-mcp/) | `json_query` | LLM needs deep JSON traversal (filters, projections, pipes) without hallucinating |\n| [`@mukundakatta/diff-mcp`](./packages/diff-mcp/) | `unified_diff`, `apply_patch`, `parse_patch` | Code-review or code-edit agent needs character-precise patches |\n| [`@mukundakatta/sqlfmt-mcp`](./packages/sqlfmt-mcp/) | `format_sql`, `list_dialects` | Deterministic SQL formatting across 19 dialects |\n| [`@mukundakatta/shellquote-mcp`](./packages/shellquote-mcp/) | `quote_bash`, `quote_bash_argv`, `quote_cmd`, `quote_powershell` | Safe shell argument escaping; LLMs constantly mishandle quotes/$VAR |\n| [`@mukundakatta/json5-mcp`](./packages/json5-mcp/) | `parse_json5`, `to_json5`, `to_strict_json` | LLM emitted JSON-with-comments / trailing-commas; round-trip to strict JSON |\n| [`@mukundakatta/toml-yaml-json-mcp`](./packages/toml-yaml-json-mcp/) | `parse`, `format`, `convert` | TOML / YAML / JSON conversion (LLMs especially mishandle TOML) |\n| [`@mukundakatta/timezone-mcp`](./packages/timezone-mcp/) | `convert_tz`, `now_in`, `tz_offset` | IANA timezone math with real DST rules; LLMs hallucinate offsets |\n| [`@mukundakatta/html-to-markdown-mcp`](./packages/html-to-markdown-mcp/) | `html_to_md`, `extract_text` | Web-scraping agents need clean Markdown / text from HTML |\n\n## Sibling libraries\n\nThe first four wrap or re-implement logic from the user's Rust + Python work:\n\n- [`ragdrift`](https://crates.io/crates/ragdrift) (crates.io) /\n  [`ragdrift-py`](https://pypi.org/project/ragdrift-py/) (PyPI) — five-dimensional drift detection\n- [`embedrank`](https://crates.io/crates/embedrank), [`promptbudget`](https://crates.io/crates/promptbudget),\n  [`stopstream`](https://crates.io/crates/stopstream), [`citecite`](https://crates.io/crates/citecite),\n  [`ragmetric`](https://crates.io/crates/ragmetric) — pure-Rust crates from\n  the [`rust-llm-stack`](https://github.com/MukundaKatta/rust-llm-stack) workspace\n\nThe MCP servers are independent: they implement the logic they need in plain\nJavaScript so installing them doesn't pull a Rust toolchain.\n\n## Install (any of them)\n\nAdd to your MCP client config. Example for Claude Desktop:\n\n```json\n{\n  \"mcpServers\": {\n    \"promptbudget\": { \"command\": \"npx\", \"args\": [\"-y\", \"@mukundakatta/promptbudget-mcp\"] },\n    \"citecite\":     { \"command\": \"npx\", \"args\": [\"-y\", \"@mukundakatta/citecite-mcp\"] },\n    \"ragmetric\":    { \"command\": \"npx\", \"args\": [\"-y\", \"@mukundakatta/ragmetric-mcp\"] },\n    \"ragdrift\":     { \"command\": \"npx\", \"args\": [\"-y\", \"@mukundakatta/ragdrift-mcp\"] },\n    \"csv-tools\":    { \"command\": \"npx\", \"args\": [\"-y\", \"@mukundakatta/csv-tools-mcp\"] },\n    \"regex-test\":   { \"command\": \"npx\", \"args\": [\"-y\", \"@mukundakatta/regex-test-mcp\"] },\n    \"jmespath\":     { \"command\": \"npx\", \"args\": [\"-y\", \"@mukundakatta/jmespath-mcp\"] },\n    \"diff\":           { \"command\": \"npx\", \"args\": [\"-y\", \"@mukundakatta/diff-mcp\"] },\n    \"sqlfmt\":         { \"command\": \"npx\", \"args\": [\"-y\", \"@mukundakatta/sqlfmt-mcp\"] },\n    \"shellquote\":     { \"command\": \"npx\", \"args\": [\"-y\", \"@mukundakatta/shellquote-mcp\"] },\n    \"json5\":          { \"command\": \"npx\", \"args\": [\"-y\", \"@mukundakatta/json5-mcp\"] },\n    \"toml-yaml-json\": { \"command\": \"npx\", \"args\": [\"-y\", \"@mukundakatta/toml-yaml-json-mcp\"] },\n    \"timezone\":       { \"command\": \"npx\", \"args\": [\"-y\", \"@mukundakatta/timezone-mcp\"] },\n    \"html-to-md\":     { \"command\": \"npx\", \"args\": [\"-y\", \"@mukundakatta/html-to-markdown-mcp\"] }\n  }\n}\n```\n\n## Develop\n\n```bash\ngit clone https://github.com/MukundaKatta/mcp-stack\ncd mcp-stack\nnpm install\nnpm test --workspaces\n```\n\n## License\n\nMIT OR Apache-2.0.\n",
  "bytes": 5166,
  "sha": "31217d6404f84d245716c004607559bfcb8574ca277378bfef629610922d37c9",
  "repo_slug": "mukundakatta/mcp-stack",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_mukundakatta_sqlfmt_mcp_f3a1aad7/readme"
}