{
  "markdown": "# boutique-mcp\n\n<!-- mcp-name: io.github.matematicsolutions/boutique-mcp -->\n\nA **local MCP catalog** of [MateMatic Boutique](https://matematicsolutions.com/en/boutique):\n103 entries at the time of writing - 43 legal-data MCP connectors (SAOS, CBOSA,\nEUR-Lex, national ELI servers from Austria to Japan), 52 MateMatic agent skills\nand 8 curated third-party skills.\n\nIt answers one question: which building block solves the task at hand, and how\nto install it locally. The catalog points, it never proxies. Your agent gets a\ncopy-paste `uvx`/`npx` command or a download link and runs it on your machine.\n\n**Status: v0.1.0** | License: **Apache-2.0** | Maintainer: [MateMatic](https://matematicsolutions.com)\n\n## Why local\n\nA hosted discovery API sees every query it answers, and in legal work the query\nitself is often confidential (\"counter-arguments to our client's position in...\").\nThis connector never sees anything: search runs in-process over a local copy of\n`catalog.json`. The only\nnetwork request it ever makes is a conditional GET of the public catalog itself\n(ETag / If-None-Match).\n\nNo network? You get the last catalog cached on disk, or the snapshot shipped\ninside the package. Either way the response says where the data came from and\nhow old it is: \"catalog generated on X, source: network / disk-cache /\nbundled-snapshot\". Nothing is installed or executed for you. The catalog\nreturns commands; you run them.\n\n## MCP tools\n\n- **`boutique_search(query, jurisdiction?, entry_type?, limit?)`** - keyword search\n  (English, Polish or Portuguese) over the catalog. Every hit carries a local\n  install command. When coverage is missing, the response says so in `gaps[]`\n  instead of padding weak matches.\n- **`boutique_get(id)`** - the full card for one entry: names and descriptions in\n  every available language, install, version, license, source and card URLs.\n- **`boutique_whats_new(since_date?)`** - what was added or updated since a date\n  (default: the 30 days before the catalog was generated).\n- **`boutique_coverage()`** - declares what this catalogue covers, where it comes\n  from and what it does NOT cover. Every gap carries a stable id and a fallback.\n  Call it when a search returns nothing: the absence may be a gap in the catalogue.\n- **`boutique_request_coverage(description, jurisdiction?)`** - drafts a\n  coverage-request issue for a gap. **Draft only**: nothing is sent anywhere;\n  a human reviews and submits it.\n\n## Quickstart\n\n```bash\nuvx boutique-mcp\n```\n\nMCP client configuration (`mcp-servers.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"boutique\": {\n      \"command\": \"uvx\",\n      \"args\": [\"boutique-mcp\"]\n    }\n  }\n}\n```\n\n### Windows 11 with Smart App Control\n\nSmart App Control blocks unsigned executables, which covers `uvx.exe`, `pip.exe`\nand the `boutique-mcp.exe` launcher that pip writes at install time. The `python.exe` and\n`py.exe` from the python.org installer are signed by the Python Software\nFoundation, so running the module through the interpreter works:\n\n```bash\npython -m pip install boutique-mcp\npython -m boutique_mcp\n```\n\n`pip.exe` is blocked for the same reason, so install with `python -m pip`, not\n`pip install`. If `python` is not on PATH, use the Windows launcher: `py -3 -m boutique_mcp`.\n\n```json\n{ \"mcpServers\": { \"boutique-mcp\": { \"command\": \"python\", \"args\": [\"-m\", \"boutique_mcp\"] } } }\n```\n\nDo not turn Smart App Control off to work around this - it cannot be re-enabled\nwithout reinstalling Windows.\n\n## Configuration\n\n| Env | Default | Meaning |\n|---|---|---|\n| `BOUTIQUE_MCP_CATALOG_URL` | `https://matematicsolutions.com/catalog.json` | Catalog source |\n| `BOUTIQUE_MCP_CACHE_DIR` | `~/.matematic/cache/boutique-mcp` | Disk cache location |\n| `BOUTIQUE_MCP_OFFLINE` | unset | `1` = never touch the network |\n| `BOUTIQUE_MCP_AUDIT` | unset | `1` = opt-in local audit log (tool name + timing only, never query content) |\n\n## Data source\n\n`catalog.json` is generated in the [www-matematic](https://matematicsolutions.com)\nrepository from the same source as the Boutique page tiles (three languages);\na pre-commit and CI check fails whenever the two drift apart. A machine-readable server card lives\nat [`/.well-known/mcp/server-card.json`](https://matematicsolutions.com/.well-known/mcp/server-card.json).\n\n## Development\n\n```bash\npython -m venv .venv\n.venv/bin/pip install -e \".[dev]\"        # Windows: .venv\\Scripts\\pip\n.venv/bin/python -m pytest tests/ -q     # offline - fixture catalog\n.venv/bin/python -m ruff check src tests\n```\n\n## Governance\n\nThe project constitution forbids a hosted discover/invoke proxy and any logging\nof query content. The only adoption metric MateMatic sees is the CDN download\ncounter of the public `catalog.json` file. The one tool that produces outbound\ntext, `boutique_request_coverage`, stops at a draft; a human submits it.\n\nConstitution and spec: [`.matematic/`](.matematic/) in this repository.\n",
  "bytes": 4905,
  "sha": "669a89a17cd57c92aa876a7f13bfe2137f3c5bab5c23460fe49b84692979232e",
  "repo_slug": "matematicsolutions/boutique-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_matematicsolutions_boutique_mc_86391499/readme"
}