---
title: Connector
description: The MCP endpoint every host connects to, how it authenticates, and the seventeen tools it serves.
---

Every workspace serves one MCP endpoint:

```
https://midland.md/api/mcp
```

The endpoint speaks Streamable HTTP. Foundation is its own OAuth 2.1 authorization server
and publishes the standard discovery documents, so a host registers and runs
the authorization flow with PKCE, and the person approves in the browser.
You paste nothing but the URL.

## Hosts
**Claude.ai.** Settings, Customize, Custom Connector, paste the URL, leave
authentication as detected, sign in. One install covers the web, Claude
Desktop, Cowork and Claude Code on the account.

**Codex.** Settings, MCP servers, Add server. Name `midland`, transport
**Streamable HTTP**, paste the URL. Save, restart, then **Authenticate**.
The desktop app, the CLI and the IDE extension share the configuration.

**Any other MCP client.** Add a remote server at the URL and let the client
run the authorization flow. Send `Accept: application/json, text/event-stream`
on every request.

## Couriers
A courier is a small job that fetches a source on a schedule and writes what
it found into the workspace. It does not run the authorization flow: it sends
its connection key as a bearer token on every request, and a 401 means the key
was withdrawn. [Members and roles](/concepts/members-and-roles) covers what a courier may do
and how you add one.

```bash
curl https://<your workspace>/api/mcp \
  -H "Authorization: Bearer <connection key>" \
  -H "Accept: application/json, text/event-stream" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
```

## Tools
Each tool's description tells the agent when to call it, when not to and
what every error means. In brief:

| Tool                  | What it does                                                              |
| --------------------- | ------------------------------------------------------------------------- |
| `list_entities`       | The shortlist for a filter, complete, with the tag index. The first call. |
| `search_entities`     | Possible matches on partial wording across names and descriptions.        |
| `get_entity`          | One entity in full: a body, a latest value, or a list's entry index.      |
| `get_skill`           | The team's skills: bare for the index, with an id for one.                |
| `get_team_members`    | The people an admin described, by name and what they handle.              |
| `get_authoring_guide` | How this entity's content should be composed. Read before writing.        |
| `get_manual`          | Foundation's own manual, by chapter.                                      |
| `save_alias`          | Save verified wording as an alias for an entity.                          |
| `request_entity`      | Ask the admins for context the workspace does not hold.                   |
| `create_entity`       | Define a new entity. Admin only.                                          |
| `write_text`          | A new version of a text, term or skill body.                              |
| `write_metric`        | Append one dated observation, verbatim.                                   |
| `write_list_entry`    | Append one named entry.                                                   |
| `update_list_entry`   | Rewrite one living entry in place.                                        |
| `delete_list_entry`   | Remove one entry permanently. Admin only.                                 |
| `set_entity_tags`     | Replace an entity's tags. Owner only.                                     |
| `write_guide`         | Write the authoring or retrieval guide. Owner only.                       |

[Routines](/concepts/routines) covers the seven routine tools.
