Send MCP connector
OAuth2.1/DCRFiles & DocumentsProductivityConnect to Send to create, edit, and share Claude-generated documents as polished web pages with engagement tracking, custom domains, and team asset...
Send MCP connector
-
Install the SDK
Section titled “Install the SDK”Terminal window npm install @scalekit-sdk/nodeTerminal window pip install scalekit -
Set your credentials
Section titled “Set your credentials”Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret> -
Authorize and make your first call
Section titled “Authorize and make your first call”quickstart.ts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENV_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'sendmcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Send MCP:', link)process.stdout.write('Press Enter after authorizing...')await new Promise(r => process.stdin.once('data', r))// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'sendmcp_get_guidelines',toolInput: {},})console.log(result)quickstart.py import osfrom scalekit.client import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENV_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "sendmcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Send MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="sendmcp_get_guidelines",connection_name=connection_name,identifier=identifier,)print(result)
What you can do
Section titled “What you can do”Connect this agent connector to let your agent:
- Showcontent records — Embeds Send-managed content inline in the chat
- Images manage — Unified image management tool
- Guideline manage — Create, update, or delete a user-defined Send guideline
- Getdocument records — Fetch an existing Send document by share URL or share ID
- Get image gallery, guidelines — Returns all workspace images with proxy URLs for display in the gallery UI
- Editdocument records — Edit an existing Send document via deterministic string replacement
Tool list
Section titled “Tool list”Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.
sendmcp_complete_upload#Confirms a direct-to-storage upload completed successfully. Call this after uploading to the presigned URL returned by create_presigned_upload. Returns the registered file ID that can be referenced in documents as <img src="asset:{fileId}">. This is step two of the two-step image upload flow.7 params
Confirms a direct-to-storage upload completed successfully. Call this after uploading to the presigned URL returned by create_presigned_upload. Returns the registered file ID that can be referenced in documents as <img src="asset:{fileId}">. This is step two of the two-step image upload flow.
bucketstringrequiredThe storage bucket used for the upload. Returned as part of the presigned upload response from create_presigned_upload.filenamestringrequiredThe original filename of the uploaded file. Must match what was passed to create_presigned_upload. Example: 'hero-image.png'.keystringrequiredThe storage key (path) used for the upload. Returned as part of the presigned upload response from create_presigned_upload.mime_typestringrequiredThe MIME type of the uploaded file. Must match what was passed to create_presigned_upload. Example: 'image/png'.sizenumberrequiredThe final file size in bytes after the upload completed.heightintegeroptionalImage height in pixels. Provide when the uploaded file is an image. Pass null for non-image files.widthintegeroptionalImage width in pixels. Provide when the uploaded file is an image. Pass null for non-image files.sendmcp_create_presigned_upload#Creates a presigned upload target URL so files can be uploaded directly to storage. This is step one of the two-step image upload flow. Call this first to get the presigned URL, upload the file directly to that URL, then call complete_upload to confirm the upload and register the file.2 params
Creates a presigned upload target URL so files can be uploaded directly to storage. This is step one of the two-step image upload flow. Call this first to get the presigned URL, upload the file directly to that URL, then call complete_upload to confirm the upload and register the file.
filenamestringrequiredThe original filename of the file to upload. Example: 'hero-image.png'.mime_typestringrequiredThe MIME type of the file. Example: 'image/png', 'image/jpeg', 'image/webp'.sendmcp_createdocument#Three modes: plan (pass intent only to get guidance), copy (pass sourceShareId to copy an existing doc), and create (pass html to publish a new document). If intent is passed without html or sourceShareId, returns tailored guidance — call CreateDocument again with html to actually publish. When sourceShareId is provided, the new document starts as an exact copy; do not also pass html. The html field must be a complete, self-contained HTML document starting with <!DOCTYPE html>, using no external dependencies, pure CSS and vanilla JS only, with sections wrapped in <section>, fully responsive and mobile-first, images referenced as <img src="asset:{fileId}">, all links with target="_blank" rel="noopener noreferrer", and icons as <i data-lucide="name"></i>.4 params
Three modes: plan (pass intent only to get guidance), copy (pass sourceShareId to copy an existing doc), and create (pass html to publish a new document). If intent is passed without html or sourceShareId, returns tailored guidance — call CreateDocument again with html to actually publish. When sourceShareId is provided, the new document starts as an exact copy; do not also pass html. The html field must be a complete, self-contained HTML document starting with <!DOCTYPE html>, using no external dependencies, pure CSS and vanilla JS only, with sections wrapped in <section>, fully responsive and mobile-first, images referenced as <img src="asset:{fileId}">, all links with target="_blank" rel="noopener noreferrer", and icons as <i data-lucide="name"></i>.
htmlstringoptionalThe complete, self-contained HTML document to publish. Must start with <!DOCTYPE html>. Single file: body then style then script. No external dependencies — pure CSS and vanilla JS only. Wrap each section in <section>. Fully responsive, mobile-first. Reference images as <img src="asset:{fileId}">. Every <a href> uses target="_blank" rel="noopener noreferrer". For icons, use <i data-lucide="name"></i>. Do not pass this when sourceShareId is provided.intentstringoptionalOne-sentence description of what the user wants to make (max 256 characters). If passed without html or sourceShareId, the tool returns tailored guidance — call CreateDocument again with html to actually create the document.sourceShareIdstringoptionalShare ID or full URL of an existing Send document to copy. When provided, the new document starts as an exact copy. Do not also pass html when using this field.titlestringoptionalTitle of the document to create or copy.sendmcp_editdocument#Edit an existing Send document via deterministic string replacement. Requires at least one entry in edits — instruction alone does nothing. If you don't have the document's current HTML, call GetDocument first. Edits apply sequentially; if any edit fails, none are persisted. Use when the user asks to change, tweak, fix, reword, restyle, add to, or remove anything from an existing document.4 params
Edit an existing Send document via deterministic string replacement. Requires at least one entry in edits — instruction alone does nothing. If you don't have the document's current HTML, call GetDocument first. Edits apply sequentially; if any edit fails, none are persisted. Use when the user asks to change, tweak, fix, reword, restyle, add to, or remove anything from an existing document.
editsarrayrequiredArray of edit objects. Each object must include old_string (the exact text to replace, with enough surrounding context to be unique) and new_string (replacement text, or empty string to delete). Optionally set replace_all to true to replace every occurrence. Edits apply in order; all-or-nothing — if any fails, none are saved.shareIdOrUrlstringrequiredThe document's share ID (8-char alphanumeric) or full URL (e.g. https://send.co/a/RaU0Kud4). Returned by CreateDocument or GetDocument.codeEditstringoptionalOptional raw code edit string.instructionstringoptionalOptional brief description of the intended change. Recorded for analytics only — does NOT perform the edit. You must still provide edits.sendmcp_get_guidelines#Fetches Send guidelines by ID, or lists all available guidelines. With id, returns a single guideline including its full content. Without id, returns a list of all available guidelines (name and description only). Call only when the user explicitly references a guideline by name or asks to apply or browse guidelines — do not call proactively when creating or editing documents.1 param
Fetches Send guidelines by ID, or lists all available guidelines. With id, returns a single guideline including its full content. Without id, returns a list of all available guidelines (name and description only). Call only when the user explicitly references a guideline by name or asks to apply or browse guidelines — do not call proactively when creating or editing documents.
idstringoptionalID of the guideline to load. Omit to list all available guidelines (name and description only). Only call with an ID when the user has explicitly named or requested a specific guideline.sendmcp_get_image_gallery#Returns all workspace images with proxy URLs for display in the gallery UI. Each item includes an optional description for model context (not shown in the UI). No parameters required.0 params
Returns all workspace images with proxy URLs for display in the gallery UI. Each item includes an optional description for model context (not shown in the UI). No parameters required.
sendmcp_getdocument#Fetch an existing Send document by share URL or share ID. Returns the full HTML source and metadata. Call this before EditDocument when you need the document's current HTML bytes.1 param
Fetch an existing Send document by share URL or share ID. Returns the full HTML source and metadata. Call this before EditDocument when you need the document's current HTML bytes.
shareIdOrUrlstringrequiredThe document's share ID (8-char alphanumeric string), slug (e.g. 'my-proposal-RaU0Kud4'), or full URL (e.g. 'https://send.co/a/RaU0Kud4').sendmcp_manage_guideline#Create, update, or delete a user-defined Send guideline. Call only when the user explicitly asks to create, edit, or delete a guideline — not during document creation. Actions: create (provide name, description, content), update (provide id and the fields to change), delete (provide id). Destructive for the delete action.5 params
Create, update, or delete a user-defined Send guideline. Call only when the user explicitly asks to create, edit, or delete a guideline — not during document creation. Actions: create (provide name, description, content), update (provide id and the fields to change), delete (provide id). Destructive for the delete action.
actionstringrequiredAction to perform on the guideline. 'create' creates a new guideline (requires name, description, content). 'update' modifies an existing guideline (requires id). 'delete' removes a guideline permanently (requires id).contentstringoptionalFull guideline content — includes instructions, code samples, asset references, example document URLs. Required when action is 'create'. Optional for 'update'.descriptionstringoptionalShort description of the guideline's purpose. Displayed in the guidelines list.idstringoptionalGuideline ID. Required for 'update' and 'delete' actions. Omit when creating a new guideline.namestringoptionalGuideline name. Required when action is 'create'. Optional for 'update'.sendmcp_manage_images#Unified image management tool. Controls what the user sees (upload area, image gallery) and what image data is fetched. Pass ids to fetch specific images by ID; omit ids to fetch all recent images; pass an empty array [] to skip fetching (UI-only mode). Use showUpload to display a drag-and-drop upload area. Use showGallery to control gallery visibility.3 params
Unified image management tool. Controls what the user sees (upload area, image gallery) and what image data is fetched. Pass ids to fetch specific images by ID; omit ids to fetch all recent images; pass an empty array [] to skip fetching (UI-only mode). Use showUpload to display a drag-and-drop upload area. Use showGallery to control gallery visibility.
idsarrayoptionalWhich images to fetch. Omit to fetch all recent images. Pass specific IDs to fetch only those images. Pass an empty array [] to skip fetching entirely (UI-only mode).showGallerybooleanoptionalShow the image gallery. Defaults to true when fetching images (ids is omitted or has values), false when ids is an empty array [].showUploadbooleanoptionalShow the drag-and-drop upload area for the user to upload new images. Default is false.sendmcp_showcontent#Embeds Send-managed content inline in the chat. Pass type 'doc' with the shareId to render a published HTML document inline so the user can view it. Call this after CreateDocument or EditDocument when the user should see the result. Requires the user to be signed in to Send.2 params
Embeds Send-managed content inline in the chat. Pass type 'doc' with the shareId to render a published HTML document inline so the user can view it. Call this after CreateDocument or EditDocument when the user should see the result. Requires the user to be signed in to Send.
idstringrequiredThe Send share ID (8-char alphanumeric string) or full /a/ URL of the document to display. Returned by CreateDocument. Example: 'RaU0Kud4' or 'https://send.co/a/RaU0Kud4'.typestringrequiredComponent type to embed. Only 'doc' is currently supported — renders a published Send HTML document inline in the chat.