sieve_dataroom_add
Add a document to a deal's data room, creating the deal if needed. Upload a pitch deck, financials, or other document via file, text, or URL for screening.
Instructions
Add a document to a deal's data room. Creates the deal if needed.
This is the primary way to get documents into Sieve for screening. Upload a pitch deck, financials, or any document -- then call sieve_screen to analyze everything in the data room.
Provide company_name to create a new deal (or find existing), or deal_id to add to an existing deal.
Provide exactly one content source: file_path (local file), text (raw text/markdown), or url (fetch from URL).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Document title (e.g. "Pitch Deck Q1 2026"). | |
| company_name | No | Company name -- creates deal if new, finds existing if not. | |
| deal_id | No | Add to an existing deal (from sieve_deals or previous sieve_dataroom_add). | |
| website_url | No | Company website URL (used when creating a new deal). | |
| document_type | No | Type: 'pitch_deck', 'financials', 'legal', or 'other'. | other |
| file_path | No | Path to a local file (PDF, DOCX, XLSX). The tool reads and uploads it. | |
| text | No | Raw text or markdown content (alternative to file). | |
| url | No | URL to fetch document from (alternative to file). |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/sieve_mcp/server.py:196-244 (handler)MCP tool handler for sieve_dataroom_add. Decorated with @mcp.tool, accepts title, company_name, deal_id, website_url, document_type, file_path, text, url parameters. Delegates to client.dataroom_add().
@mcp.tool( annotations={ "readOnlyHint": False, "destructiveHint": False, "openWorldHint": True, } ) async def sieve_dataroom_add( title: str, company_name: str = "", deal_id: str = "", website_url: str = "", document_type: str = "other", file_path: str = "", text: str = "", url: str = "", ) -> dict: """Add a document to a deal's data room. Creates the deal if needed. This is the primary way to get documents into Sieve for screening. Upload a pitch deck, financials, or any document -- then call sieve_screen to analyze everything in the data room. Provide company_name to create a new deal (or find existing), or deal_id to add to an existing deal. Provide exactly one content source: file_path (local file), text (raw text/markdown), or url (fetch from URL). Args: title: Document title (e.g. "Pitch Deck Q1 2026"). company_name: Company name -- creates deal if new, finds existing if not. deal_id: Add to an existing deal (from sieve_deals or previous sieve_dataroom_add). website_url: Company website URL (used when creating a new deal). document_type: Type: 'pitch_deck', 'financials', 'legal', or 'other'. file_path: Path to a local file (PDF, DOCX, XLSX). The tool reads and uploads it. text: Raw text or markdown content (alternative to file). url: URL to fetch document from (alternative to file). """ return await client.dataroom_add( company_name=company_name, deal_id=deal_id, website_url=website_url, title=title, document_type=document_type, file_path=file_path, text=text, url=url, ) - src/sieve_mcp/server.py:196-202 (registration)Registration of sieve_dataroom_add as an MCP tool via the @mcp.tool decorator with annotations (destructiveHint=False, openWorldHint=True).
@mcp.tool( annotations={ "readOnlyHint": False, "destructiveHint": False, "openWorldHint": True, } ) - src/sieve_mcp/client.py:172-209 (helper)Client-side helper function dataroom_add that builds the request body and sends it to POST /api/v1/public/dataroom. Handles file_path (base64 encoding), text, and url content sources.
async def dataroom_add( company_name: str = "", deal_id: str = "", website_url: str = "", title: str = "Document", document_type: str = "other", file_path: str = "", text: str = "", url: str = "", ) -> dict[str, Any]: """Add a document to a deal's data room.""" body: dict[str, Any] = {"title": title, "document_type": document_type} if company_name: body["company_name"] = company_name if deal_id: body["deal_id"] = deal_id if website_url: body["website_url"] = website_url if file_path: import base64 import mimetypes file_name = os.path.basename(file_path) content_type = mimetypes.guess_type(file_path)[0] or "application/octet-stream" with open(file_path, "rb") as f: file_bytes = f.read() body["file_base64"] = base64.b64encode(file_bytes).decode("ascii") body["file_name"] = file_name body["file_content_type"] = content_type elif text: body["text"] = text elif url: body["url"] = url return await _request("POST", "/dataroom", json_body=body, timeout=60.0) - src/sieve_mcp/server.py:203-212 (schema)Python type annotations defining the input schema for sieve_dataroom_add: title (str, required), company_name (str, optional), deal_id (str, optional), website_url (str, optional), document_type (str, default 'other'), file_path (str, optional), text (str, optional), url (str, optional). Returns dict.
async def sieve_dataroom_add( title: str, company_name: str = "", deal_id: str = "", website_url: str = "", document_type: str = "other", file_path: str = "", text: str = "", url: str = "", ) -> dict: - src/sieve_mcp/server.py:13-18 (registration)MCP server instructions referencing sieve_dataroom_add as the primary way to add documents to a deal's data room.
instructions=( "Sieve is an AI-powered startup due diligence platform. " "It scores startups across 7 IMPACT-X dimensions (each 0-20, total 0-140) " "and returns a Take Meeting / Pass / Need More Info recommendation.\n\n" "WORKFLOW:\n" "1. Add documents: sieve_dataroom_add with company_name + file/text/url\n"