- request_upload_urls25 files per call
- PUT bytesauth.sifrsys.com, ≤100 MB
- finalize_uploadsstarts processing
- Searchableabout a minute later
Before you connect: an API key
Step 1. Create a key
In Sifrsys, Settings → Agents & API → Create key. Scopes only narrow what a key can do; a key can never exceed the current role of the person who created it, and creating rooms needs an admin or owner. The key (sifr_live_…) is shown once. Put it in your shell environment rather than in a file you might commit:
export SIFRSYS_MCP_KEY="sifr_live_..."The one-command install
Step 2. Connect your agent
Syntax below is from each tool's own documentation, checked 26 September 2026.
claude mcp add --transport http sifrsys https://sifrsys.com/mcp \
--header "Authorization: Bearer $SIFRSYS_MCP_KEY"Check it with claude mcp list, or /mcp inside a session. Avoid --scope project for this server: that writes .mcp.json, which is meant to be committed, and the key would go with it.
{
"mcpServers": {
"sifrsys": {
"url": "https://sifrsys.com/mcp",
"headers": { "Authorization": "Bearer ${env:SIFRSYS_MCP_KEY}" }
}
}
}[mcp_servers.sifrsys]
url = "https://sifrsys.com/mcp"
bearer_token_env_var = "SIFRSYS_MCP_KEY"In Codex, codex mcp list or /mcp in the TUI confirms the server is loaded.
A seed-round setup, start to finish
Step 3. Point it at the folder
Run the agent from the directory that holds the documents and give it the whole job in one message. Below is what a Claude Code session looks like. It is abridged: identifiers are shortened and each result is cut to the fields that matter, but the tool names, arguments and field names are the ones the Sifrsys server uses.
> Set up a data room for our seed round from ./seed-docs. Call it
"Acme — Seed Round". Upload everything, sort it into Corporate,
Financials, Legal, Team and Product, then invite Jane Doe
(jane@fund.example) and Mark Lee (mark@capital.example) as a
"Lead investors" group: view-only, watermarked, no downloads.
● sifrsys - create_data_room (name: "Acme — Seed Round")
⎿ room.id: 7c1e… upload_page_url: https://sifrsys.com/room/7c1e…
● Bash(ls -la ./seed-docs)
⎿ 14 files: deck, model (.xlsx), cap table, charter, SAFEs, …
● sifrsys - request_upload_urls (room_id: 7c1e…, files: [14 items])
⎿ uploads[]: { filename, upload_url (auth.sifrsys.com), document_id,
version_id, expires_at } next_step: "PUT each file's bytes…"
● Bash(for each file: curl -sf -X PUT -H "Content-Type: <mime>"
--data-binary @"<file>" "<upload_url>")
⎿ 14 × HTTP 200
● sifrsys - finalize_uploads (room_id: 7c1e…, uploads: [14 pairs])
⎿ finalized[]: { document_id, version_id, status }
● sifrsys - organize_documents (create_folders: [5], apply: false)
⎿ 5 folders created; a suggested folder + confidence per document
Here is where Smart Sort would put each file. Two are below 0.7
(the board consent and the advisor agreement) and would stay put.
Apply?
> Yes, and put those two in Legal.
● sifrsys - organize_documents (apply: true)
● sifrsys - invite_participants (new_group: "Lead investors",
permission_level: view, watermark_enabled: true, can_download: false,
invites: [2])
⎿ group created. pending_approval: { approval_id: 3f9a…,
action_class: invite_external, summary: "Bulk-invite 2 participants
to the room", expires_in_hours: 24 }
The invitations are waiting for an admin to approve them in Sifrsys
(Settings → Agents & API). Tell me when that's done.
> Approved.
● sifrsys - get_pending_approvals (approval_id: 3f9a…) ⎿ status: approved
● sifrsys - invite_participants (group_id: …, invites: [2],
approval_id: 3f9a…)
⎿ 2 invitations sent
> What does the model say our runway is? Cite the cells.
● sifrsys - ask_room_ai (question: "…runway…")
⎿ answer_wrapped (marked as untrusted document content), citations[]Step 4. Organize
Smart Sort always runs as a preview first unless you ask otherwise. Documents at or above 0.7 confidence move when it is applied; the rest stay where they are for you (or the agent, on your instruction) to place.
Step 5. Invite and approve
The group is created immediately; the invitations wait for an admin. Approvals are single-use and bound to the exact request, so the agent must retry the identical call with the approval_id, which it does on its own once it sees the status change.
Step 6. Ask and monitor
ask_room_ai answers from the room's documents with page and cell citations, and get_engagement_report shows who has opened what. Both are just as useful weeks later, from the same terminal.
Prompts to copy
Set up a Sifrsys data room called "Acme — Seed Round" from ./seed-docs: upload every file, create folders Corporate, Financials, Legal, Team and Product, preview Smart Sort and show me before applying.Read the files in ./seed-docs and write a data room index (one line per document: folder, filename, what it is). Upload it to the room as "00 Index.txt".Invite these investors from investors.csv into a new "First look" group: view-only, watermarked, no downloads, Q&A on. Tell me when it needs my approval.Give the "Lead investors" group download access to the Financials folder.Ask the room AI to list every change-of-control clause in the Legal folder, with the page each one is on.Which investors haven't opened anything in the last 7 days? Draft a short nudge for each, but don't send anything.The four upload paths
A local agent can use all four, but it will normally pick the signed URL because it is the only one that takes 100 MB files straight from disk. The others exist for cloud agents whose sandbox cannot make outbound requests; the claude.ai and ChatGPT guides explain when those apply.
| Criterion | Tool | Limit | Needs outbound network from the agent? |
|---|---|---|---|
| Signed URLAgent PUTs the bytes | request_upload_urls → HTTP PUT → finalize_uploads | 100 MB per file, 25 files per call, URL valid about 5 minutes | Yes, to auth.sifrsys.com |
| InlineContent inside the tool call | upload_inline_document | 4 MB decoded | No |
| From a linkSifrsys fetches it | upload_from_url | 20 MB, https only, no login or cookies | No |
| Upload page hand-offYou upload, the agent waits | upload_page_url, then get_room_overview until document_count rises | Whatever your plan's storage allows | No |
Which agent for which situation
| Criterion | claude.ai (web, desktop) | ChatGPT (developer mode) | Claude Code, Cursor, Codex CLI |
|---|---|---|---|
| Sign-in to Sifrsys | OAuth consent screen, no key to paste | OAuth consent screen, no key to paste | API key (sifr_live_…) in a header |
| Files on your own diskThe common case for a seed round | Attach them to the chat and allow auth.sifrsys.com in network settings, or use the upload page | Upload page: you drop the files in, the agent carries on | Works natively: the agent reads the folder and uploads it |
| Files at an https link | upload_from_url, up to 20 MB | upload_from_url, up to 20 MB | Any of the four paths |
| Documents the agent writes (index, FAQ, summary) | upload_inline_document, up to 4 MB | upload_inline_document, up to 4 MB | upload_inline_document, or write the file and upload it |
| Large files | Signed URL (100 MB) only once egress to auth.sifrsys.com is allowed | Upload page | Signed URL, up to 100 MB each |
| Client plans that can connect | Free (one custom connector), Pro, Max, Team, Enterprise | Plus, Pro, Business, Enterprise, Edu, on the web | Any: the client runs on your machine |
| Best for | Founders who live in Claude and have a handful of files | Teams already on ChatGPT; organizing, inviting and asking once files are in | A folder of 30+ files, repeatable setups, anything scripted |
What an agent is never allowed to do by default
Every Sifrsys organization has a policy matrix that sets each class of agent action to allow, require approval, or deny. The defaults below are the ones in the server code. An owner or admin can change them under Settings → Agents & API; nothing an agent says in a chat can.
| Criterion | Default | What it covers |
|---|---|---|
| Denied | Refused with denied_by_policy | Deleting or suspending: documents, folders (and merging duplicate folders), participants, groups, and the room itself. Also changing room branding (configure_branding) and publishing the room's participant portal |
| Needs your approval | Returns a pending_approval handle | Sending or resending invitations (invite_participants, resend_invite); widening access: a permission on a specific document or folder (set_permissions), a more permissive group, a later or removed access expiry, reactivating a suspended participant; publishing a Q&A answer to the person who asked, assigning a question, changing its status |
| Allowed | Runs immediately, logged | Reading, creating rooms, uploading (including new versions of a document), renaming and moving documents and folders, removing empty folders, Smart Sort, creating groups, narrowing access, asking the room AI, drafting Q&A answers, restoring a suspended room |
An approval goes to the organization's admins by email and appears under Settings → Agents & API. It is single-use, matched to the exact request the agent made, and expires after 24 hours, so an approval for inviting two people cannot be replayed to invite a third. Every agent action, allowed or not, lands in the room's hash-chained audit log as actor_type=agent with the human who connected it. A key or connection can never do more than the person who created it, and an org-wide switch turns all agent access off at once.
Document text that comes back through ask_room_ai or list_qa is wrapped and labelled as untrusted data, because it was written by the other side of the deal. The threat model explains why.
Agent access is on every Sifrsys plan, the free one included. An agent works inside your plan's limits (the free plan is one room, 100 MB of storage and five participants per room), and the only agent meter is a monthly budget of room-AI questions: 250 on Free, 10,000 on Teams, 50,000 on Pro. Creating, uploading, organizing and inviting are not metered. Bursts are capped at 60 requests a minute per connection. Plans are on the pricing page.
Sources
Checked on 26 September 2026: Claude Code MCP documentation (claude mcp add --transport http … --header, scopes, /mcp); Cursor MCP documentation (mcp.json locations, ${env:NAME} interpolation in headers); OpenAI Codex MCP documentation (url and bearer_token_env_var in config.toml). Sifrsys tool names, limits and defaults are from the MCP server source; the reference is on the developers page and the REST surface is in the OpenAPI spec.
The other agent guides: With Claude (claude.ai) · With ChatGPT · Developer reference · The walkthrough, with the real tool calls