# Connect your assistant to VISC

You do not need to be an administrator of anything to use VISC from an AI assistant. Any person with a VISC account can connect their own assistant to their own account, and the connection is theirs alone: they grant it, they see what it did, they revoke it.

There are two levels, and the first one needs no setup at all.

**Anonymous, public data.** Point any MCP client at `https://visc.cat/mcp` — no account, no sign-in, no key. That gives access to everything VISC publishes: the 947 municipalities, their agendas, news, open civic incidences, topic pages, comarca profiles, the communities' public pages. It can also **prepare** things for you to add: an act for your town's agenda, an incidence, a recipe, an event for your community, a whole new community — it answers with a VISC link that opens the form already filled, and you send it yourself. If that is all you want, stop here; the rest of this page is not needed. See [tools.md](https://visc.cat/agents/tools.md) for what's available.

**Your own account.** Point it at `https://visc.cat/mcp/me` instead and it will ask you to sign in to VISC and approve the connection. Then your assistant can read *your* data — your communities, your inscriptions, your saved events — **propose** content you publish yourself, and, if you allow it, send acts to the agenda's moderation queue in your name. That is what this page is about.

## What a connection can and cannot do

You approve a specific set of permissions on a screen that names them in Catalan. What a person can grant today:

| Permission | What it allows |
|---|---|
| `read:own` | your public profile, your communities, your inscriptions, your saved agenda items |
| `read:profile` | your vincles (the towns you live, work, were born in, love or want to visit; the places you starred) and your plan profile (who comes with you, free time, activities, how you move) — so it can tell you what would make VISC work better for you and which communities fit |
| `propose:profile` | propose changes to those vincles and that profile. Nothing changes until you press «Aplica» on `/on/pendents` |
| `read:community` | a private summary of a community you belong to — its events, posts and poll results. Never a member list |
| `propose:content` | draft topic pages and entries for a municipality, or a new community, for you to review and publish (a community you publish is yours: you are its owner, the assistant never a member) |
| `propose:incidence` | draft a civic incidence report you described, for you to review and publish |
| `submit:agenda` | send an act to a town's agenda **in your name**: it goes to the same moderation queue as your own «Publica el teu acte», spends **your** daily limit for acts, and is public only once a moderator approves it. You follow it under «Els teus actes» on `/publica` |
| `feedback` | file a bug report or request with the VISC team |

What no connection can ever do, whatever you approve — there is no tool for it and no permission that expresses it:

- move money, pay, charge, or touch your wallet
- join or leave a community, or change anyone's permissions
- **publish anything.** Everything an assistant writes is a *proposal* that becomes real only when you press publish on your review page — or, with `submit:agenda`, an act a moderator still has to approve
- sign anything (an initiative, «jo també»): that is always your own tap
- message people, or delete anyone else's content

Records you publish from an assistant's proposal are marked as agent-prepared. That is deliberate: readers can see how something was made.

## Claude on the web, Desktop or mobile

1. Go to **Customize → Connectors** ([claude.ai/customize/connectors](https://claude.ai/customize/connectors)) and choose **Add custom connector**. On Team and Enterprise plans an owner adds it once under Organization settings; members then press **Connect**.
2. Enter the URL: `https://visc.cat/mcp/me`
3. Leave **Advanced settings** empty: no client ID or secret is needed. VISC accepts both Anthropic's hosted client metadata and automatic registration. If Claude asks how it should identify itself, either option works; **Use Anthropic's hosted client metadata** is the preferred one.
4. Press **Add**, then **Connect**. Your browser opens VISC's approval page.
5. Sign in to VISC if you are not already, read the permissions, optionally name the connection ("Claude — temes de Vacarisses"), and press **Autoritza**.

The connector is now available from the **+** menu in any conversation.

## Claude Code

```bash
claude mcp add --scope user --transport http visc https://visc.cat/mcp/me
```

`claude mcp list` will show `visc` as `! Needs authentication`. Start a session, run `/mcp`, select `visc`, choose **Authenticate**, and approve in the browser that opens. Drop `--scope user` if you only want it in the current project.

Claude Code signs in through a loopback address on your own machine, so VISC's approval page says so explicitly. Approve it only if you started the connection yourself, from that machine.

## Any other MCP client

VISC is a standard OAuth 2.1 authorization server. A client can connect if it supports:

- **Client ID Metadata Documents** (preferred) — your `client_id` is the https URL of a small JSON document you host describing your client. VISC advertises `client_id_metadata_document_supported: true` and `token_endpoint_auth_methods_supported: ["none"]`, which is what CIMD-capable clients look for.
- **or Dynamic Client Registration** (RFC 7591) — `POST https://visc.cat/oauth/register` with `client_name` and `redirect_uris`. You get back a public client (`token_endpoint_auth_method: "none"`, no secret) whose `client_id` is a `https://visc.cat/oauth/clients/…` URL. Registering again with the same name and redirect URIs returns the same `client_id`. All non-loopback redirect URIs must share one host, and that host is what the approval page shows.
- **PKCE with S256** — required on every authorization request.
- **A redirect URI** that is https, or http on `localhost` / `127.0.0.1` for a program running on your own machine. Loopback ports are matched port-agnostically (RFC 8252), so declaring `http://localhost/callback` and listening on any port works.

Discovery starts where every MCP client starts: request `https://visc.cat/mcp/me` without a token and you get a `401` with `WWW-Authenticate: Bearer resource_metadata="https://visc.cat/.well-known/oauth-protected-resource", scope="…"`. Follow it to the resource document, then to `https://visc.cat/.well-known/oauth-authorization-server` for the endpoints. The full flow, and the plain-HTTP alternative at `https://visc.cat/api/v1/me/{tool}`, are in [tools.md](https://visc.cat/agents/tools.md).

## After you connect

Things worth asking for once the connection is live:

- *"Què tinc apuntat aquest mes?"* — reads your inscriptions and saved events.
- *"Mira el tema de l'aigua de Vacarisses i proposa'm tres entrades noves amb fonts oficials."* — reads the existing topic, researches, and files a proposal for you.
- *"Ahir vaig veure un fanal fos al carrer Major. Ja està reportat?"* — checks open incidences first; only drafts a new one if it isn't.
- *"L'Ateneu fa un concert dissabte a les 7 a la plaça. Penja'l a l'agenda."* — with `submit:agenda`, sends it to moderation in your name and tells you how many acts you have left today; without it, gives you a filled `/publica` link.
- *"Volem crear l'AFA de l'escola a VISC."* — checks the entity isn't on VISC yet, then proposes the community; you create it with one tap from `/on/pendents`.
- *"Què hauria de dir-li a VISC perquè em funcioni millor?"* — with `read:profile`, reads what is missing (where you live, your free time, what you like doing) and which communities of your town match it; then, if you tell it, proposes the changes for you to apply.

Two pages on VISC are yours to watch:

- **`/on/connexions`** — every assistant you have connected: which permissions, when it last ran, how much it read today, and a two-tap revoke. Revoking takes effect within a minute even mid-session.
- **`/on/pendents`** — what your assistants have proposed. Review item by item, edit the text, publish what's good (or «Aplica» for your profile and vincles), or reject with a reason the assistant reads back and learns from.

**How approving works.** VISC sends you no notification for a proposal: your assistant gives you a link, `https://visc.cat/on/pendents?proposta=…`, that opens your review page on that proposal (it asks you to sign in first if needed). You can also open it from your dashboard, «Propostes pendents». Untick what you don't want, edit, then press the button at the bottom of the card. Proposals you leave alone expire after 30 days, and nothing in them ever happened.

## Limits

Each connection may read 500 times, write 50 times and file 5 support tickets per day. Beyond that it gets `quota_exceeded` until the next day. These are generous for real use and deliberately too small to scrape with. An act sent with `submit:agenda` also counts against **your own** daily limit for acts — the same one as when you use the form — and the answer tells the assistant how many you have left.

Content must be in Catalan, and every proposed topic entry must carry a source URL. Both are checked before a proposal is stored, so an assistant that ignores them gets an error rather than wasting your review time. The writing contract is [authoring.md](https://visc.cat/agents/authoring.md).

## When it doesn't work

| What you see | What it means |
|---|---|
| The client asks for a client ID and secret | It found no way to register. Leave the fields empty and retry; if it still asks, report it — VISC supports both CIMD and dynamic registration, and never issues a secret |
| `invalid_redirect_uri` when registering | A redirect URI is not https (or http on loopback), or the URIs point at more than one host |
| `invalid_request: redirect_uri … not registered` | The redirect the client used is not in its own metadata document. Nothing you can fix in VISC — report it to the client |
| `invalid_client: metadata document could not be fetched` | The client's `client_id` URL is unreachable or is not JSON |
| The approval page says the request expired | Authorization requests live 10 minutes. Start the connection again |
| Tools appear but every call says `unauthenticated` | The connection was revoked, or you connected to `https://visc.cat/mcp` (anonymous) instead of `https://visc.cat/mcp/me` |
| `quota_exceeded` | The daily cap for that connection. It resets at midnight UTC |

## Not covered here

**Community agents.** A community can seat an agent as a member of its own, with its own public handle and its own permissions inside that community — that is set up by a community administrator from the members page, and it is a different thing from connecting your personal assistant. See [tools.md](https://visc.cat/agents/tools.md).
