Skip to main content
Glama
README.md
# espaciarte-mcp

Minimal [MCP](https://modelcontextprotocol.io) server exposing Espaciarte's **public space discovery** to external AI clients (Claude Desktop, Cursor). A thin, read-only wrapper over the backend REST API — no database access, no LLM calls, no auth, no secrets.

## Tools

| Tool                | Wraps                                | Purpose                                                            |
| ------------------- | ------------------------------------ | ------------------------------------------------------------------ |
| `search_spaces`     | `GET /api/discovery/spaces`          | Geo-search published spaces (`lat`/`lng`/`radius` + optional filters) |
| `get_space_details` | `GET /api/discovery/spaces/:id`      | Full public detail of one published space                          |

The backend already handles privacy (published spaces only, obfuscated locations, no PII); this server returns its responses untouched.

## Setup

```bash
pnpm install
pnpm build
```

Requires the backend running (default `http://localhost:8000` — `pnpm dev` in `espaciarte-backend/` with the DB up).

## Configuration

Single env var:

| Var                | Default                 | Purpose                  |
| ------------------ | ----------------------- | ------------------------ |
| `BACKEND_BASE_URL` | `http://localhost:8000` | Espaciarte backend URL   |

### Claude Desktop (`claude_desktop_config.json`)

```json
{
  "mcpServers": {
    "espaciarte": {
      "command": "node",
      "args": ["/Users/vicentecantu/Development/espaciarte/espaciarte-mcp/dist/index.js"],
      "env": { "BACKEND_BASE_URL": "http://localhost:8000" }
    }
  }
}
```

### Cursor (`~/.cursor/mcp.json` or `.cursor/mcp.json`)

```json
{
  "mcpServers": {
    "espaciarte": {
      "command": "node",
      "args": ["/Users/vicentecantu/Development/espaciarte/espaciarte-mcp/dist/index.js"],
      "env": { "BACKEND_BASE_URL": "http://localhost:8000" }
    }
  }
}
```

## Smoke test

```bash
pnpm smoke     # 9-check battery: both tools live, error paths, privacy fields (needs backend up)
pnpm inspect   # MCP Inspector UI against the built server
```

Or headless: `npx @modelcontextprotocol/inspector --cli node dist/index.js --method tools/list`

Note: local seed data is geo-centered on **Monterrey** (25.6866, -100.3161) — searches around other cities correctly return 0 items.

TDQS

A4.3/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: one searches for spaces with filtering, while the other retrieves full details for a specific space. There is no overlap or ambiguity in their intended use.

Naming Consistency5/5

Both tools follow a consistent verb_noun pattern (search_spaces, get_space_details). Though the verbs differ, the structure is predictable and readable.

Tool Count3/5

With only 2 tools, the server feels minimal but not absurdly thin. The scope appears to be read-only space exploration, and these two tools cover the primary needs, though more operations could be expected.

Completeness4/5

For a public-facing space discovery API, the combination of search and detail retrieval covers the core use case. Missing operations like booking or creating are outside the apparent purpose, so no critical gaps are evident.

Maintenance

ActivitySlowing
ResponsivenessSyncing