Sanka
@sankaHQ
About Sanka
Sanka is the extension company. Plug AI into your sales lifecycle — deals, quotes, billing, and 100+ CRM/commerce integrations — directly from Claude or Codex.
Config
Add this server to your MCP-compatible client using the configuration below.
{
"mcpServers": {
"sanka": {
"url": "https://mcp.sanka.com/mcp"
}
}
}Tools
200Fetch current hosted Sanka MCP capability guidance before refusing an ambiguous or newly added Sanka capability. Use this when local Skill text or visible tools may be stale.
Search and review job postings in Sanka.
Load one job posting by UUID or display id.
Create a job posting using Sanka object property keys.
Update a job posting using Sanka object property keys.
Archive a job posting without permanently deleting it.
Reactivate an archived job posting.
Search and review applicants in Sanka.
Load one applicant by UUID or display id.
Create a applicant using Sanka object property keys.
Update a applicant using Sanka object property keys.
Archive a applicant without permanently deleting it.
Reactivate an archived applicant.
Search and review interviews in Sanka.
Load one interview by UUID or display id.
Create a interview using Sanka object property keys.
Update a interview using Sanka object property keys.
Archive a interview without permanently deleting it.
Reactivate an archived interview.
Load the planned organization chart, staffing phases, and unassigned job postings.
Add a planned position to the ideal organization chart.
Update a planned position using optimistic version control.
Attach a job posting to a planned position, or detach it by passing job_id null.
Assign an employee to a planned position and optionally record the source applicant.
Read the global Cargo catalog operating view: category and supplier counts, research runs, publication blockers, RFQ intakes, LP snapshots, and import batches. This catalog is independent of workspace Company records.
Idempotently import a normalized Cargo research bundle into the global catalog. The bundle may contain categories, suppliers, research runs, sources, claims, raw artifacts, and draft or ready-for-review LP snapshots. This tool never publishes an LP snapshot.
Start or resume the Sanka OAuth connection flow. Use this when the user explicitly asks to connect or reconnect Sanka.
Debug whether the Sanka CRM connector is authenticated. Do not use this as a preflight before company or contact lookup tools.
Return the Sanka workspace currently bound to this OAuth credential, including workspace_name, workspace_code, and internal workspace_id. Use this to verify workspace context before live Sanka operations.
List workspaces available to the authenticated Sanka OAuth session. Use the returned internal id with switch_workspace; do not use the short workspace_code as workspace_id.
Switch the authenticated Sanka workspace. Pass the internal workspace_id from list_workspaces, not the short workspace_code. After switching, omit workspace_id on normal data tools.
Invite one user to an explicitly verified Sanka workspace. Call current_workspace immediately before this tool and pass its internal workspace_id as expected_workspace_id. The tool and API both block on a mismatch. This sends an invitation email and may consume a billable seat, so explicit confirmation is required.
List pending and historical invitations for the authenticated Sanka workspace.
Cancel one pending invitation in an explicitly verified Sanka workspace. Call current_workspace immediately before this tool and pass its internal workspace_id as expected_workspace_id. The tool and API both block on a mismatch. Explicit confirmation is required.
Read one base64 chunk from a large PDF download returned by a Sanka PDF download tool. Concatenate chunks in offset order, then decode the combined base64 string.
Review ONLY the authenticated user private/personal account-level inbox in Sanka. Do not use for Sanka-connected Gmail integrations, workspace integration inbox, /conversation, Contact Conversation, shared inbox, group inbox, or workspace inbox; use list_workspace_messages for those.
Pull latest messages ONLY for the authenticated user private/personal account-level inbox. Do not use for Sanka-connected Gmail integrations, workspace integration inbox, /conversation, shared inbox, group inbox, or workspace inbox; use sync_workspace_messages for those.
Load one authenticated user private/personal account-level inbox thread, including message history and reply metadata. Do not use for /conversation or shared workspace inbox threads; use get_workspace_message_thread for those.
Send a reply on an authenticated user private/personal account-level inbox thread in Sanka. Requires explicit user authorization for the exact reply via confirm_send=true and returns the actual sender email. If multiple distinct send-capable email addresses are connected across personal and workspace inboxes, the user must also confirm the exact sender via expected_sender_email; with one address it may be omitted. Drafting or writing a reply is not send authorization. This is not for workspace integration inbox, /conversation, shared inbox, group inbox, or workspace inbox threads.
Archive an authenticated user private/personal account-level inbox thread in Sanka. Do not use for /conversation or shared workspace inbox threads.
Review shared workspace/integration inbox threads in Sanka. Prefer this for Sanka-connected Gmail, Gmail integrations, integration inbox, /conversation, Contact Conversation, shared inbox, group inbox, and workspace inbox. This is not the authenticated user private/personal inbox.
Pull latest shared workspace/integration inbox messages into Sanka from integration-linked channels such as Gmail. Prefer this for "Sanka-connected Gmail", Gmail integration inbox, /conversation, Contact Conversation, shared inbox, group inbox, and workspace inbox requests.
Load one shared workspace/integration inbox thread from Sanka, including message history/body. Use this for /conversation, Contact Conversation, shared inbox, group inbox, workspace inbox, and integration-linked Gmail threads, not private/personal account inbox threads.
Send a reply from the shared workspace identity attached to a Sanka workspace/integration inbox thread. Requires explicit user authorization for the exact reply via confirm_send=true and returns the actual sender email. If multiple distinct send-capable email addresses are connected across personal and workspace inboxes, the user must also confirm the exact sender via expected_sender_email; with one address it may be omitted. Drafting or writing a reply is not send authorization. Use this for /conversation, Contact Conversation, shared inbox, group inbox, workspace inbox, and integration-linked Gmail threads, not private/personal inbox threads.
Query Sanka or live integration records with server-side filters and field projection. Use scope="integration" with provider="hubspot" or provider="salesforce" for provider-side rows; use this instead of list_* when the user asks for filtered rows or only a few fields.
Compute counts and grouped counts for Sanka or live integration records with server-side filters. Use scope="integration" with provider="hubspot" or provider="salesforce" for provider-side counts. For “how many”, totals, or empty-field count questions, use this tool instead of paging through list_* results.
List Sanka app-builder templates such as CRM, ERP, expense management, inventory, procurement, billing, HR, IT asset management, project management, and support desk before previewing or applying a workspace blueprint.
Preview a Sanka workspace blueprint including side-menu modules, object schema references, permission sets, guides, flowcharts, and ER diagrams. Use template_slug for exact template matches, overlay for template + AI overlay partial matches, or blueprint_dsl for unknown generated blueprints. This does not mutate records.
Apply a validator-approved Sanka workspace blueprint by mutating global side-menu modules, creating missing custom objects, creating or updating permission sets, saving generated guide/Mermaid artifacts, and optionally promoting them to editable guide manuals. Requires confirm=true after explicit user approval; generated blueprints also require allow_generated_blueprint_apply=true.
Preview a Sanka-native merge plan for duplicate companies or contacts. Use after query_records mode="dedupe_candidates" and before merge_records. Returns primary/duplicate records, field resolution, related record relink plan, archive behavior, and required confirmation.
Apply a confirmed Sanka-native merge for duplicate companies or contacts. Call preview_record_merge first, then call this only after the user explicitly approves the merge plan. Requires confirm=true.
Create a Sanka custom object row. Set custom_object or custom_object_slug to the custom object slug/internal key or id. Use data keys as field names, internal_name values, or field UUIDs.
Update a Sanka custom object row by row UUID. Use data keys as field names, internal_name values, or field UUIDs.
Archive a Sanka custom object row by row UUID. This is a soft archive, not a permanent delete.
Review associations between Sanka records. Provide source_object/source_id or target_object/target_id; optionally filter by label_id or label.
Create an association between two Sanka records using a workspace association label. Pass label_id when known; otherwise pass label.
Delete an association between two Sanka records. Prefer association_id; otherwise pass source_object/source_id, target_object/target_id, and label_id or label.
Search and review companies. Default scope=sanka lists Sanka companies; scope=sanka with provider=salesforce lists Sanka companies linked to Salesforce Accounts; scope=integration with provider=salesforce lists live Salesforce Accounts; scope=integration with provider=freee or provider=moneyforward lists live accounting partners as companies.
Load one company from Sanka by company id, numeric id, or external reference.
Create or upsert a company. Default target=sanka mutates Sanka only; external_id is optional and should be used for idempotent upserts. Use target=integration with provider=salesforce to mutate Salesforce only, or target=both when the API allows both-side sync. freee/MoneyForward partner creation is handled by invoice_export, not this tool.
Update an existing company. Default target="sanka" mutates Sanka only; use target="integration" or target="both" with provider="hubspot" or provider="salesforce" when allowed. freee/MoneyForward partner updates are not supported here. For company dedupe, use operation="dedupe_preview" first; execute operation="dedupe_apply" with confirm=true only after explicit user approval.
Archive or delete a company. Default target=sanka archives in Sanka only. Use target=integration with provider=salesforce to delete a Salesforce record by external_id, or provider=freee/provider=moneyforward to delete an accounting partner by external_id. Always run dry_run=true first and set confirm=true only after explicit approval.
Load company-level item pricing for one company. Use `search` to answer questions like "what price is item X set to for company Y?"
Update the company-wide price-table mode or default company percentage for one company.
Set or clear a company-specific price override for one item. Use `clear_override` to remove the item-specific override.
Apply one company-level percentage override across all items for a company.
Search and review contacts in Sanka. Use this when the user wants to find or inspect contacts, not to create or update them.
Load one contact from Sanka by contact id, numeric id, or external reference.
Create a contact in Sanka or a connected CRM. `external_id` is optional for Sanka-local creates and should be used for idempotent upserts; integration-only creates can omit it and use the returned provider id.
Update an existing contact in Sanka or a connected CRM.
Archive or delete a contact in Sanka or a connected CRM by contact id or external reference.
Review deals. By default this lists Sanka pipeline records; use scope="integration" with provider="hubspot" or provider="salesforce" to read live CRM-side deals/opportunities from the connected channel.
Load one deal from Sanka by case id, deal numeric id, or external reference.
Create a deal in Sanka or a connected CRM. `external_id` is optional for Sanka-local creates and should be used for idempotent upserts; integration-only creates can omit it and use the returned provider id.
Update an existing deal in Sanka or a connected CRM. Use `lookup_external_id` when the path identifier is not the external reference you want to resolve by.
Archive or delete a deal in Sanka or a connected CRM by case id, numeric id, or external reference.
Discover the deal pipelines and stages defined in the current workspace. Use this when the user wants to understand pipeline structure, list available stages, or describe deal positions in context.
Capture a point-in-time pipeline snapshot from Sanka Deals or live HubSpot Deals. Use source_system="hubspot" with a connected channel_id for HubSpot snapshot demos.
List captured pipeline snapshot batches. Use this before comparing snapshots when the user did not provide batch ids.
Load one pipeline snapshot batch and its captured deal rows. Use this to inspect the frozen deal values behind a snapshot diff.
Compare two pipeline snapshot batches and return amount, weighted amount, stage transition, close-date, and per-deal deltas. Omit batch ids to compare the latest two matching batches.
Write pipeline snapshot diffs into HubSpot sanka_test_* deal properties. Defaults to dry_run=true; set dry_run=false and confirm=true only after reviewing the preview.
Create a Sanka workflow definition or a provider workflow by passing provider=hubspot through the same workflow endpoint. For HubSpot, dry_run defaults to true unless confirm=true.
List the sandbox linked to the current workspace (one sandbox per workspace). Each entry includes the sandbox link id, status (creating/active/refreshing/failed/deleting), the sandbox workspace code, and copy stats. Operates on the current workspace; use switch_workspace first if needed.
Report whether the CURRENT workspace is itself a sandbox (is_sandbox, status, and the production workspace it belongs to). Call this before risky or experimental changes: if is_sandbox=true you are already in a safe copy; if false, consider creating or switching to a sandbox first.
Create a sandbox copy of the current workspace configuration (objects, fields, views, pipelines, workflows arrive paused; records, integrations, and credentials are never copied). Responds 202 with status=creating; poll list_sandboxes until active. Requires an admin role and sandbox entitlement (partner plan or an override); one sandbox per workspace.
Copy a sample of production records into an active sandbox: per selected object, the newest 5,000 records with custom field values, line items, and associations between copied records. Additive and idempotent (re-running adds newer records without duplicating). Responds 202; progress lands in the sandbox copy_stats.
Compare the sandbox configuration against production per family (views, workflows, fields, pipelines, …): counts and bounded item lists for new-in-sandbox, modified-since-copy, and production-only. Use this as the checklist before re-applying tested changes to production.
Replace everything in the sandbox with a fresh copy of current production configuration. PERMANENTLY DISCARDS all sandbox changes and copied data; the sandbox keeps its workspace code and URLs. Refreshes sit 24h apart (a never-refreshed sandbox may refresh immediately). Requires confirm=true after explicit user approval.
PERMANENTLY delete the sandbox workspace and everything in it. Production is never affected. Requires confirm=true after explicit user approval.
Update a Sanka workflow definition or a provider workflow by passing provider=hubspot through the same workflow endpoint. HubSpot updates require workflow_id or external_id as the HubSpot flow id.
Run an existing Sanka-native workflow definition. HubSpot workflow creation and updates use create_workflow/update_workflow with provider=hubspot.
Resolve an ambiguous user phrase such as a company, deal, or Salesforce Opportunity reference into candidate records before previewing or starting a workflow.
Dry-run a supported business workflow. For deal_to_estimate, previews the Sanka estimate draft and approval state. For deal_to_order, previews creating or reusing a Sanka Order from a HubSpot Deal or synced CRM revenue record. For deal_to_subscription, previews the Order-first subscription flow and supports HubSpot batch filters such as subscription_flag_property. For estimate_to_invoice, previews creating/reusing a Sanka Order from a Sanka Estimate before invoicing. For order_to_invoice, order_to_subscription, and order_to_purchase_order, previews billing, subscription, or shortage-driven procurement creation from Sanka Orders. For subscription_to_invoice, previews invoice generation from Sanka Subscriptions, including duplicate-period checks by start_date. For deal_to_order_handoff, previews a closed-won HubSpot Deal to Sanka order draft / fulfillment handoff with customer/contact resolution, line items, inventory availability, lead-time and delivery timing, duplicate warnings, and HubSpot writeback plan. For invoice_export, previews syncing explicitly scoped Sanka invoice drafts to freee or MoneyForward invoice drafts and returns needs_confirmation for ambiguous or broad sync requests without writing records. For freee, preview/start provider capabilities and next_actions are the source of truth: freee records are cancelled/restorable rather than physically deleted, allow_resync updates mapped draft/unregistered invoices, and allow_multiple_freee_drafts creates a separate draft only with explicit user intent. Use preview/start results, not list_integration_channels shadow/outbound flags, as the source of truth for accounting export blockers. For quote_readiness, checks whether a Salesforce Opportunity has enough clean data to quote and returns blockers, warnings, fixes, source links, and the generic Sanka platform-mapping reuse/create plan. For revenue_control_summary, summarizes read-only HubSpot closed-won revenue into won, quote_drafted, approval_pending, unbilled, invoiced, unpaid, and blocked buckets with totals and next actions. For sales_incentive_commission, calculates a draft/read-only commission report by rep and deal from HubSpot closed-won deals reconciled with Sanka invoices/orders, payment status, refunds/credits, margin, ownership splits, and Sanka incentive rules. Direct CRM deal_to_invoice is disabled; create an order first. Does not write records.
Start a supported business workflow. For deal_to_estimate, creates a Sanka estimate draft from the deal, applies existing estimate approval rules, creates pending approval requests when required, and stops there until approval. For deal_to_order, creates or reuses a Sanka Order from a HubSpot Deal or synced CRM revenue record. For deal_to_subscription, creates/reuses the Sanka Order and then creates/updates the Subscription from that Order, including HubSpot batch lists filtered by subscription flags. For estimate_to_invoice, creates/reuses a Sanka Order from a Sanka Estimate, then creates the Invoice from that Order. For order_to_invoice, order_to_subscription, and order_to_purchase_order, starts from Sanka Order records; order_to_purchase_order creates POs only for detected inventory shortages. For subscription_to_invoice, creates invoice drafts from selected Sanka Subscription records. For deal_to_order_handoff, creates a Sanka order draft and optional fulfillment handoff task from an eligible closed-won HubSpot Deal only after explicit start/confirmation; it reruns duplicate/idempotency checks and writes HubSpot order/fulfillment status only after Sanka creation succeeds. For invoice_export, syncs only explicitly scoped Sanka invoice drafts to freee or MoneyForward invoice drafts after duplicate/idempotency checks; do not use it for an ambiguous sync-all request. For freee repeats, never tell the user to delete the freee invoice; freee supports cancellation/restoration instead. Use allow_resync=true for the mapped draft/unregistered invoice, or allow_multiple_freee_drafts=true only after explicit confirmation for a separate draft. list_integration_channels may provide accounting channel_id candidates, but its integration-sync shadow/outbound flags are not invoice_export blockers. Do not use start_workflow for quote_readiness, revenue_control_summary, or sales_incentive_commission; they are read-only preview workflows. Direct CRM deal_to_invoice is disabled.
Load a workflow run created by start_workflow, including created records, pending or completed approval history, and audit events.
Parse a natural-language purchasing intent or draft request into a Sanka Buy request preview. This tool does not create the request; use create_buy_request for writes.
List Sanka Buy requests in the authenticated workspace with optional status filtering.
Create a draft Sanka Buy request with one or more request lines. Use this before sourcing products or selecting offers.
Load one Sanka Buy request including lines, active offer selections, and merchant purchases.
Update editable draft fields on a Sanka Buy request.
Cancel a Sanka Buy request before downstream purchasing is complete.
Start or record a sourcing run for a Sanka Buy request. provider=shopify_global_catalog searches the Shopify Global Catalog (results may be queued or unavailable until the adapter is configured). With provider=procurement_rfq, pass constraints.procurement_request_id to link an existing RFQ, or pass constraints.vendor_company_ids to originate a new RFQ and invite those vendors. Then reconcile vendor proposals with sync_buy_rfq, compare offers via get_buy_sourcing_run or get_buy_request, and continue with select_buy_offer.
Reconcile a Sanka Buy request with its linked procurement RFQ: ingest newly received vendor proposals into draft offer snapshots and refresh invitation state. Use this after source_buy_request with provider=procurement_rfq, and re-run it to poll for new proposals. The response is also the way to read current RFQ invitation status (invited, viewed, proposed, declined, expired, superseded); there is no separate invitation list endpoint. Compare the ingested offers with get_buy_sourcing_run or get_buy_request, then continue with select_buy_offer.
List sourcing runs for a Sanka Buy request.
Load one Sanka Buy sourcing run by id.
Select one immutable offer snapshot per Buy request line. Multi-line and multi-merchant requests must pass line_selections so downstream merchant purchases can be split correctly. Pass acknowledge_fee=true only after the buyer explicitly accepts a quoted Cargo success fee.
Preview whether the selected Sanka Buy offers require approval before downstream Purchase Order or checkout steps.
Submit a Sanka Buy request after line offers are selected. This may approve immediately or create approval requirements; it does not create PO/Bill/checkout records by itself.
Create or reuse Sanka Company and Purchase Order records from an approved Sanka Buy request.
Load one Sanka Buy merchant purchase, including linked Company, Purchase Order, checkout, external order, and Bill ids when present.
Prepare a manual checkout URL for a Sanka Buy merchant purchase after Purchase Order creation. This does not complete payment.
Record the user-confirmed external merchant order id after manual Sanka Buy checkout.
Create or reuse a draft Sanka Bill from a Sanka Buy merchant purchase with linked Company and Purchase Order.
Preview accounting export readiness for a Sanka Buy merchant purchase after Bill creation. This does not create Journal entries or accounting exports.
List WatchTower waste findings (upcoming renewals, vendor price creep, possibly duplicate vendors) in the authenticated workspace, with optional status and finding_type filters. Findings with buy_request_id already link to a Sanka Buy request.
Update the triage status of one WatchTower waste finding: confirmed to accept the signal, dismissed to reject it, or new to reopen it. The resolved status is system-managed and cannot be written.
Turn one WatchTower waste finding into a draft Sanka Buy request so the replacement purchase can be sourced and compared. Repeat calls reuse the already linked Buy request (the response reports created=false). Continue with the Sanka Buy tools (source_buy_request, select_buy_offer, submit_buy_request) afterwards.
Load the WatchTower spend summary for the authenticated workspace: current and previous month totals, month-over-month delta, per-source totals, a monthly trend, and category plus top-vendor breakdowns.
List partner organizations managed in Convoy, including company, status, tier, type, and member count.
Load one Convoy partner organization by UUID.
Create a Convoy partner linked to an existing Sanka company or create and link a new company. This does not send an invitation; use invite_convoy_partner_member separately.
Update selected Convoy partner profile and lifecycle fields.
Archive a Convoy partner after explicit approval. This preserves history and does not delete the linked Sanka company.
List portal members and invitation status for one Convoy partner.
Invite a partner member to the Convoy portal. This sends email and requires explicit user approval with confirm_send=true.
Resend a Convoy portal invitation email. Requires explicit user approval with confirm_send=true.
Revoke a partner member invitation and portal access after explicit approval.
List partner invoice requests and their submission, review, and payment status.
Load one Convoy invoice request with submission, review, and payment evidence.
Create one monthly invoice request for a partner. Active partner members may receive an email, so explicit approval with confirm_send=true is required.
Approve, reject, cancel, or mark a Convoy invoice request paid. Requires explicit approval with confirm=true. Marking paid records evidence only; it does not execute a bank transfer.
List Convoy commission calculations and approval or payment status.
Load one Convoy commission with calculation and lifecycle details.
Preview monthly Convoy commissions by default. Set dry_run=false only after explicit approval to store draft commissions.
Approve or mark one Convoy commission paid after explicit approval. Marking paid records status only and does not execute a bank transfer.
Queue a batch of HubSpot CMS landing-page drafts through a Lookout Motion. Configures the guarded lookout-hubspot-create-landing-page action (master-page allowlist, slug namespace, volume caps) and triggers it; the returned run stays awaiting_approval until a workspace admin approves it in the Lookout console, after which the managed executor clones the master page and PATCHes each draft. Pages are created as drafts only — publishing is a separate, always-approval-gated action. Check progress with lookout_get_run.
Inspect one Lookout Motion run: status, approval state, the triggering signal, configured action inputs, and — for executed HubSpot landing-page actions — the provider result including created page IDs and URLs.
Review items in Sanka. Use `search` to find a named item instead of query_records or broad full-list scans.
Load one item from Sanka by item id, numeric id, or external reference.
Create an item in Sanka. `external_id` is required so repeated calls can upsert safely against the same external reference.
Update an existing item in Sanka.
Archive or delete an item in Sanka by item id or external reference.
Search and review orders in Sanka.
Load one order from Sanka by order id, numeric id, or external reference.
Download an order from Sanka as a PDF document.
Upload an order attachment to Sanka from an already available base64 payload. Prefer this direct upload when the client can pass content_base64 reliably. For client-local PDFs or payloads that are too large or unreliable to pass as one content_base64 string, use start_order_attachment_upload, append_order_attachment_upload_chunk until done, then finish_order_attachment_upload. Use the returned file_id in create_order or update_order.
Start a chunked order attachment upload for order PDFs or attachments that are too large or unreliable to pass as one content_base64 string. Use upload_order_attachment when the client can pass content_base64 reliably. Start, append every chunk in order, then finish to receive a file_id for create_order or update_order. Do not abandon the attachment only because multiple append calls are required.
Append one base64 chunk to a order attachment upload started with start_order_attachment_upload. Send the original file base64 in ordered chunks; chunk_size is the normal target, so order PDFs or attachments often complete in one append. Continue appending until the result returns done=true, then call finish_order_attachment_upload.
Finish a chunked order attachment upload after all chunks have been appended, assemble the uploaded chunks, upload the original file to Sanka, and return the file_id for create_order or update_order.
Create an order in Sanka. Provide the nested `order` payload with line items, order-level custom_fields, and optional workflow flags. Attach uploaded file ids with `attachment_file_ids` when needed.
Update an existing order in Sanka. Pass order-level custom_fields inside the nested `order` payload. Attach uploaded file ids with `attachment_file_ids` when needed.
Restore an archived order to active status in Sanka.
Archive an order in Sanka by order id, numeric id, or external reference. This is a soft delete; use permanent_delete_order only after explicit confirmation.
Permanently delete an already archived order in Sanka. Requires confirm=true and cannot be undone.
Review purchase orders in Sanka.
Load one purchase order from Sanka by purchase order id, numeric id, or external reference.
Download a purchase order from Sanka as a PDF document.
Upload a purchase order attachment to Sanka from an already available base64 payload. Prefer this direct upload when the client can pass content_base64 reliably. For client-local PDFs or payloads that are too large or unreliable to pass as one content_base64 string, use start_purchase_order_attachment_upload, append_purchase_order_attachment_upload_chunk until done, then finish_purchase_order_attachment_upload. Use the returned file_id in create_purchase_order or update_purchase_order.
Start a chunked purchase order attachment upload for purchase order PDFs or attachments that are too large or unreliable to pass as one content_base64 string. Use upload_purchase_order_attachment when the client can pass content_base64 reliably. Start, append every chunk in order, then finish to receive a file_id for create_purchase_order or update_purchase_order. Do not abandon the attachment only because multiple append calls are required.
Append one base64 chunk to a purchase order attachment upload started with start_purchase_order_attachment_upload. Send the original file base64 in ordered chunks; chunk_size is the normal target, so purchase order PDFs or attachments often complete in one append. Continue appending until the result returns done=true, then call finish_purchase_order_attachment_upload.
Finish a chunked purchase order attachment upload after all chunks have been appended, assemble the uploaded chunks, upload the original file to Sanka, and return the file_id for create_purchase_order or update_purchase_order.
Create a purchase order in Sanka from explicit supplier and line item data. Attach uploaded file ids with `attachment_file_ids` when needed. For CRM deal/opportunity-sourced procurement, use deal_to_order first and create purchase orders from the Sanka Order context.
Update an existing purchase order in Sanka. Attach uploaded file ids with `attachment_file_ids` when needed.
Delete a purchase order in Sanka by purchase order id or external reference.
Search and review task projects in Sanka.
Load one task project from Sanka by project UUID.
Create a task project in Sanka, optionally with project-specific statuses.
Update an existing task project in Sanka, including project-specific statuses.
Delete a task project in Sanka. Projects with linked tasks are rejected unless replacement_project_id or clear_task_project is provided.
List saved Ferry migration and object-design diagrams in the current Sanka workspace.
Load one saved Ferry diagram, including its complete nodes, edges, viewport, and revision.
Create a saved Ferry migration or object-design diagram from nodes and edges.
Update selected fields of a Ferry diagram while preserving unspecified graph fields. Pass the revision returned by get_ferry_diagram; stale revisions are rejected.
Permanently delete a saved Ferry diagram by UUID.
List Ferry migration programs in the current Sanka workspace.
Get one Ferry migration program, including its current phases and Todos.
List Docs (meeting updates) attached to a Ferry migration program.
Create a Markdown Doc (meeting update) in an existing Ferry migration program.
Update the title, date, Markdown content, pinned state, or archive state of a Ferry Doc.
Create a Todo in an existing Ferry migration program.
Create or update up to 100 Ferry Todos. Every item must include id or source_ref.
Update one Ferry Todo while preserving omitted fields.
Permanently delete one Todo from a Ferry migration program.
Search and review tasks in Sanka.
Load one task from Sanka by task id, numeric id, or external reference.
Create a task in Sanka.
Update an existing task in Sanka. When you need to append to a description, load the task first and then send the full updated description.
Archive or delete a task in Sanka by task id or external reference.
Review uploaded Sanka Contract templates available in the current workspace.
Download an uploaded Sanka Contract template. By default this returns the retained source document when available; pass source=false to download the signing PDF.
Upload a Contract template to Sanka from base64 PDF, DOC, or DOCX bytes. Word documents are converted to signing PDFs by the Sanka API and retained for later source download.
Upload a PDF and create a draft Sanka Contract from it.
Replace the PDF of an existing draft Sanka Contract. This resets document-derived signature field placements and is rejected after the draft is sent or scheduled.
Create a draft Sanka Contract from an uploaded contract template.
Load a Sanka Contract workflow state including draft metadata, signers, non-signing CC recipients, signature fields, timeline, and editability.
Update a Sanka Contract draft name or description before sending.
Save signer rows for a Sanka Contract draft.
Replace the complete signer and CC recipient lists for a draft Sanka Contract. Preserve signer_id when correcting an existing signer. CC recipients are non-signers and receive separate PDF copy emails.
Save signature field placements for a Sanka Contract draft.
Overview
What is Sanka?
Sanka is a hosted Model Context Protocol server that exposes Sanka's public API tools and read-only CRM tools through a single remote Streamable HTTP MCP endpoint. It is built as a TypeScript workspace and deployed on Fly.io. Developers building AI agents or assistants that need to interact with the Sanka platform use this server as the MCP bridge.
How to use Sanka?
Remote clients connect to the production endpoint at https://mcp.sanka.com/mcp (or the legacy alias https://mcp.sanka.com/sse) and authenticate with either an Authorization: Bearer <token> header or an x-sanka-api-key: <token> header. For local development, run pnpm install, pnpm build, then start the server with node packages/mcp-server/dist/index.js --transport=http --port=8080. The health of any instance can be verified via GET /health.
Key features of Sanka
- Remote Streamable HTTP MCP endpoint for the Sanka platform
- Exposes both general SDK tools and read-only CRM tools
- Authenticates via Bearer token or
x-sanka-api-keyheader - Health check endpoint at
GET /health - Production and staging environments hosted on Fly.io
- CI/CD pipeline with automatic staging deploys on push to
staging
Use cases of Sanka
- AI agents reading Sanka CRM records in a read-only fashion
- AI assistants that invoke Sanka platform SDK tools via MCP
- Developers prototyping MCP clients against a staging Sanka endpoint before production use
FAQ from Sanka
What authentication methods does Sanka support?
Clients authenticate with either an Authorization: Bearer <token> header or an x-sanka-api-key: <token> header. The server forwards those credentials to the Sanka public API.
What tools does Sanka expose?
The /mcp endpoint exposes both the general SDK tools and the read-only CRM tools from a single MCP surface.
Where is the Sanka MCP server deployed?
The production service runs on Fly.io as the sanka-mcp app. The staging environment runs as sanka-mcp-staging. Both use the same deployment pipeline from the packages/mcp-server/Dockerfile.
How do I run Sanka locally for development?
Install dependencies with pnpm install, build the project with pnpm build, then start the server with node packages/mcp-server/dist/index.js --transport=http --port=8080. Verify it works by curling the health endpoint and sending an MCP initialize request.
What is the recommended endpoint for MCP clients?
The primary endpoint is POST /mcp. Legacy clients that expect an SSE-style path can use POST /sse as a compatibility alias.
Frequently asked questions
What authentication methods does Sanka support?
Clients authenticate with either an `Authorization: Bearer <token>` header or an `x-sanka-api-key: <token>` header. The server forwards those credentials to the Sanka public API.
What tools does Sanka expose?
The `/mcp` endpoint exposes both the general SDK tools and the read-only CRM tools from a single MCP surface.
Where is the Sanka MCP server deployed?
The production service runs on Fly.io as the `sanka-mcp` app. The staging environment runs as `sanka-mcp-staging`. Both use the same deployment pipeline from the `packages/mcp-server/Dockerfile`.
How do I run Sanka locally for development?
Install dependencies with `pnpm install`, build the project with `pnpm build`, then start the server with `node packages/mcp-server/dist/index.js --transport=http --port=8080`. Verify it works by curling the health endpoint and sending an MCP initialize request.
What is the recommended endpoint for MCP clients?
The primary endpoint is `POST /mcp`. Legacy clients that expect an SSE-style path can use `POST /sse` as a compatibility alias.
Basic information
More Other MCP servers
Awesome Mlops
visengerA curated list of references for MLOps
Maestro
mobile-dev-incPainless E2E Automation for Mobile and Web
Codelf
unbugA search tool helps dev to solve the naming things problem.

EverArt
modelcontextprotocolModel Context Protocol Servers
MCP Registry
modelcontextprotocolA community driven registry service for Model Context Protocol (MCP) servers.
Comments