# boutique-mcp [Health: Active]

**Category:** ⚖️ Legal  
**Repository:** https://github.com/matematicsolutions/boutique-mcp  
**GitHub Stars:** 0  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/boutique-mcp

## Description
Local catalog of MateMatic Boutique: find a legal-data connector or skill, install locally.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `uvx` (confidence: high):

```json
"mcpServers": {
  "boutique-mcp": {
    "command": "uvx",
    "args": ["boutique-mcp"]
  }
}
```

## Documentation & README

# boutique-mcp

<!-- mcp-name: io.github.matematicsolutions/boutique-mcp -->

A **local MCP catalog** of [MateMatic Boutique](https://matematicsolutions.com/en/boutique):
103 entries at the time of writing - 43 legal-data MCP connectors (SAOS, CBOSA,
EUR-Lex, national ELI servers from Austria to Japan), 52 MateMatic agent skills
and 8 curated third-party skills.

It answers one question: which building block solves the task at hand, and how
to install it locally. The catalog points, it never proxies. Your agent gets a
copy-paste `uvx`/`npx` command or a download link and runs it on your machine.

**Status: v0.1.0** | License: **Apache-2.0** | Maintainer: [MateMatic](https://matematicsolutions.com)

## Why local

A hosted discovery API sees every query it answers, and in legal work the query
itself is often confidential ("counter-arguments to our client's position in...").
This connector never sees anything: search runs in-process over a local copy of
`catalog.json`. The only
network request it ever makes is a conditional GET of the public catalog itself
(ETag / If-None-Match).

No network? You get the last catalog cached on disk, or the snapshot shipped
inside the package. Either way the response says where the data came from and
how old it is: "catalog generated on X, source: network / disk-cache /
bundled-snapshot". Nothing is installed or executed for you. The catalog
returns commands; you run them.

## MCP tools

- **`boutique_search(query, jurisdiction?, entry_type?, limit?)`** - keyword search
  (English, Polish or Portuguese) over the catalog. Every hit carries a local
  install command. When coverage is missing, the response says so in `gaps[]`
  instead of padding weak matches.
- **`boutique_get(id)`** - the full card for one entry: names and descriptions in
  every available language, install, version, license, source and card URLs.
- **`boutique_whats_new(since_date?)`** - what was added or updated since a date
  (default: the 30 days before the catalog was generated).
- **`boutique_coverage()`** - declares what this catalogue covers, where it comes
  from and what it does NOT cover. Every gap carries a stable id and a fallback.
  Call it when a search returns nothing: the absence may be a gap in the catalogue.
- **`boutique_request_coverage(description, jurisdiction?)`** - drafts a
  coverage-request issue for a gap. **Draft only**: nothing is sent anywhere;
  a human reviews and submits it.

## Quickstart

```bash
uvx boutique-mcp
```

MCP client configuration (`mcp-servers.json`):

```json
{
  "mcpServers": {
    "boutique": {
      "command": "uvx",
      "args": ["boutique-mcp"]
    }
  }
}
```

### Windows 11 with Smart App Control

Smart App Control blocks unsigned executables, which covers `uvx.exe`, `pip.exe`
and the `boutique-mcp.exe` launcher that pip writes at install time. The `python.exe` and
`py.exe` from the python.org installer are signed by the Python Software
Foundation, so running the module through the interpreter works:

```bash
python -m pip install boutique-mcp
python -m boutique_mcp
```

`pip.exe` is blocked for the same reason, so install with `python -m pip`, not
`pip install`. If `python` is not on PATH, use the Windows launcher: `py -3 -m boutique_mcp`.

```json
{ "mcpServers": { "boutique-mcp": { "command": "python", "args": ["-m", "boutique_mcp"] } } }
```

Do not turn Smart App Control off to work around this - it cannot be re-enabled
without reinstalling Windows.

## Configuration

| Env | Default | Meaning |
|---|---|---|
| `BOUTIQUE_MCP_CATALOG_URL` | `https://matematicsolutions.com/catalog.json` | Catalog source |
| `BOUTIQUE_MCP_CACHE_DIR` | `~/.matematic/cache/boutique-mcp` | Disk cache location |
| `BOUTIQUE_MCP_OFFLINE` | unset | `1` = never touch the network |
| `BOUTIQUE_MCP_AUDIT` | unset | `1` = opt-in local audit log (tool name + timing only, never query content) |

## Data source

`catalog.json` is generated in the [www-matematic](https://matematicsolutions.com)
repository from the same source as the Boutique page tiles (three languages);
a pre-commit and CI check fails whenever the two drift apart. A machine-readable server card lives
at [`/.well-known/mcp/server-card.json`](https://matematicsolutions.com/.well-known/mcp/server-card.json).

## Development

```bash
python -m venv .venv
.venv/bin/pip install -e ".[dev]"        # Windows: .venv\Scripts\pip
.venv/bin/python -m pytest tests/ -q     # offline - fixture catalog
.venv/bin/python -m ruff check src tests
```

## Governance

The project constitution forbids a hosted discover/invoke proxy and any logging
of query content. The only adoption metric MateMatic sees is the CDN download
counter of the public `catalog.json` file. The one tool that produces outbound
text, `boutique_request_coverage`, stops at a draft; a human submits it.

Constitution and spec: [`.matematic/`](https://github.com/matematicsolutions/boutique-mcp/blob/HEAD/.matematic/) in this repository.

