MCP: Final Frame for assistants
An MCP server lets a person's assistant (Claude, ChatGPT, Cursor, or your own agent) work in Final Frame with that person's access and nothing more. Integrating a system: use the API. Letting people's assistants work in Final Frame: use MCP. Same data, same permissions, same audit trail.
| Setting | Value |
|---|---|
| URL | https://app.final-frame.com/api/mcp |
| Transport | Streamable HTTP, stateless |
| Auth | Authorization: Bearer <API key>, or an OAuth access token |
| Metadata | https://app.final-frame.com/.well-known/oauth-protected-resource |
Connecting
Claude Code:
claude mcp add --transport http final-frame https://app.final-frame.com/api/mcp \ --header "Authorization: Bearer <your key>"
Claude Desktop, Cursor and most clients take the same two facts in their MCP settings: the URL and the header. Clients that sign in with OAuth read the metadata and send the person to sign in.
Tools
| Tool | What it does | Needs |
|---|---|---|
| whoami | The organisation and permissions of the credential. | any |
| find_projects | Deals by word, direction or status. | project.view |
| read_project | One deal with its terms and the grants derived from them. | project.view |
| list_titles, read_title | The deal’s catalogue and one title with identifiers, fields, metadata, credits, certificates. | project.view |
| list_deliverables, read_deliverable | Every placeholder with what is on it (presence of a file or data), filtered by family, kind, status, presence, title, language or territory; one row in full. | project.view |
| start_upload, upload_part_urls, complete_upload | Put a file into a placeholder in parts: signed URLs, the bytes go straight to storage, then it is checked and filed. | asset.upload |
| set_deliverable_status, write_title_metadata | Move a placeholder’s status, notes or due date; write a title’s metadata. | project.configure |
| read_deliverable_data, get_download_link | Read a data placeholder; a short-lived download link for a file. | project.view, asset.download |
| list_work_orders, create_work_order | Work raised on a deal; raising one is idempotent on project and name. | workorder.view, workorder.create |
| read_closeout | What was delivered, by whom, at what cost. | project.view |
| rights_vocabulary | The rights taxonomy and the regions. | any |
| list_rights_works, read_work_rights | Every work’s rights position, and one work in full (a season or episode by its #s2 / #s2e3 identity). | org.view |
| list_rights_children, rights_map | A show’s seasons and episodes with their cells; one right across every country, for the library or one work. | org.view |
| check_availability | Is one right in one work available in one territory over one window, with reasons. | org.view |
Every tool refuses outside its scope with a plain sentence rather than an error, so an agent can explain rather than crash. Writes are idempotent. Nothing an assistant does is invisible: it lands on the deal's action log with the credential named.