Ambiguous MCP server for AI agents

Live

OAUTH 2.1

WORKSPACE

Productivity

Ambiguous MCP gives your agent a full workspace: search and send mail, post in chat, manage calendar events, create tasks, write documents and wiki pages, and work with CRM contacts and deals.

  • Per-user credentials: each call uses the actual user's token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Ambiguous MCP
agent · Acme Q3
Run
Find the latest email from Dana Ortiz about the Q4 contract.
S
ambiguousmcp_search_mail
132ms
Workspace agent
Dana's latest message is from Tuesday, subject Q4 contract, with 1 attachment.
Sources: Ambiguous mail, 3 messages
ambiguousmcp
3 messages
18:29
Message Claude...

Tools your workspace agent reaches for on Ambiguous MCP, scoped per user.

CALL ANY TOOL
1,001 tools for workspace work in Ambiguous MCP: mail, chat, calendar, tasks, documents, wiki, CRM, drive, and analytics, with search across the workspace.
ambiguousmcp_ack_mentions_activity
Ack mentions activity
Acknowledge the Mentions & reactions inbox after it has been displayed. Marks the caller's unread chat mention notifications read and stamps users.mentions_acked_at, so the projector recomputes both chat.mentions and chat.reactions to 0 durably (the sidebar "Mentions & reactions" item un-bolds and stays cleared across re-fetch). Per-channel read cursors are untouched, so channel message unread counts are unaffected; a reaction that arrives after the ack re-bolds the item.
Parameters
Name
Type
Required
Description
request_context
string
Required
Explain how this request supports the user's goal: 20-30 words, third person, without we/I/you. Exclude credentials, secrets and personal information.
reference_resource_id
string
Optional
Optional ID of an accessible Ambiguous resource where this work was requested (email, chat, comment, task, document or file).
ambiguousmcp_add_conditional_format
Add conditional format
ambiguousmcp_admin_integration_delete
Delete admin integration
ambiguousmcp_admin_integration_update
Update admin integration
ambiguousmcp_admin_integrations_list
List admin integrations
ambiguousmcp_admin_mail_suppression_create
Create admin mail suppression
ambiguousmcp_admin_notification_defaults_get
Get admin notification defaults
ambiguousmcp_analytics_metrics_upsert
Upsert analytics metrics
ambiguousmcp_analytics_query_execute
Execute analytics query
ambiguousmcp_archive_mail_thread
Archive mail thread
ambiguousmcp_calendar_event_reminders_set
Set calendar event reminders
ambiguousmcp_calendar_external_calendars_enable_sync
Sync calendar external calendars enable
ambiguousmcp_cancel_mail_rule_application
Cancel mail rule application
ambiguousmcp_chat_channel_group_remove
Remove chat channel group
ambiguousmcp_chat_message_send_receipt
Chat message send receipt
ambiguousmcp_code_review_start
Start code review
ambiguousmcp_create_mail_rule_from_search
Search create mail rule from
ambiguousmcp_create_resource_comment
Create resource comment
ambiguousmcp_delete_pivot_table
Delete pivot table
ambiguousmcp_drive_file_confirm_upload
Upload drive file confirm
ambiguousmcp_drive_publish_gallery
Drive publish gallery
ambiguousmcp_edit_recurring_event_all
Edit recurring event all
ambiguousmcp_find_and_replace_in_deck
Find and replace in deck
ambiguousmcp_get_event
Get event
ambiguousmcp_list_mail_labels
List mail labels
ambiguousmcp_mark_all_channels_read
Read mark all channels
ambiguousmcp_patch_canvas_element
Patch canvas element
ambiguousmcp_run_data_connector
Run data connector
ambiguousmcp_stop_task_timer
Stop task timer
ambiguousmcp_update_deal_line_item
Update deal line item

For more tools, view docs.

Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Ambiguous tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["ambiguousmcp"], toolNames: [
    "ambiguousmcp_search_mail",
    "ambiguousmcp_create_task",
    "ambiguousmcp_search_wiki"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Find Dana's latest email about the Q4 contract and create a task to review it" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["ambiguousmcp"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Find Dana's latest email about the Q4 contract and create a task to review it" }],
  tools,
});

// Execute the tool call with the user's vaulted Ambiguous OAuth token
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["ambiguousmcp"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Find Dana's latest email about the Q4 contract and create a task to review it" }],
  tools,
});

// Tool call runs with the user's vaulted Ambiguous OAuth token
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["ambiguousmcp"] }, pageSize: 100,
});

const agent = new Agent({
  name: "workspace_agent",
  model: "gemini-2.5-pro",
  instruction: "Ambiguous tools scoped to this user",
  tools,
});

await agent.run("Find Dana's latest email about the Q4 contract and create a task to review it");
Try these prompts
Copy any prompt into your agent. Each maps directly to a Ambiguous MCP tool. Click to copy, paste into your agent, done.
Mail and calendar
Copy the prompt
Copied
Search my mail for the latest message from Dana about the Q4 contract.
Copy the prompt
Copied
Send an email to the team with the agenda for Thursday.
Copy the prompt
Copied
Search my calendar for events with Acme next week.
Tasks and documents
Copy the prompt
Copied
Create a task to review the Q4 contract.
Copy the prompt
Copied
Search the wiki for the onboarding checklist.
Copy the prompt
Copied
Create a doc called Launch retro notes.
Chat and CRM
Copy the prompt
Copied
Search chat messages for the pricing thread.
Copy the prompt
Copied
Create a contact for Dana Ortiz at Acme.
Copy the prompt
Copied
Create a deal for the Acme renewal.
SEE HOW AUTH WORKS
Each user signs in to Ambiguous MCP once, and Scalekit stores and refreshes their tokens. Credentials stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
Ambiguous MCP
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Ambiguous MCP
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Ambiguous MCP
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Ambiguous MCP
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other productivity and collaboration connectors.
Engineering Teams
Slack triage
Polls Slack for new messages, classifies bugs and support requests with a LangGraph router, files GitHub issues or Zendesk tickets, and confirms in the thread.
Support and Ops Teams
Meeting prep
Pulls agenda, participant context, and open action items before every meeting.
GTM and RevOps Teams
CRM AI agent
Reads the Granola transcript after every call, extracts next steps and updates the HubSpot record, drafts the follow-up in Gmail, and confirms in Slack, all on the rep's own delegated OAuth.
Test other agents
See the same per-user auth pattern across other productivity and collaboration connectors.
ENGINEERING
Slack triage agent
Classify new Slack messages as bugs or support requests, file the GitHub issue or Zendesk ticket, and reply in the thread.
OPS
Meeting prep agent
Assemble the agenda, HubSpot attendee history, and open action items from Gmail before every meeting on the calendar.
GTM
CRM AI agent
Turn each Granola call transcript into a HubSpot record update, a drafted Gmail follow-up, and a Slack recap.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Ambiguous token looks fine in a demo. In production every email sent and task change looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Ambiguous today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Ambiguous MCP as the user or through a shared service account?
As the user. Each user signs in to Ambiguous once, and Scalekit stores and refreshes their tokens. Every email sent, task created, and record deleted in your audit trail is attributed to that user, not a shared service account.
Where is the Ambiguous OAuth token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. Refresh is automatic. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in Ambiguous MCP?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example the search and list tools without ambiguousmcp_delete_email or ambiguousmcp_bulk_delete_contacts. The docs mark 183 of the 1,001 tools as destructive. Scalekit also enforces scope checks before every API call.
What happens when a user revokes Ambiguous MCP access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Does the agent need all 1,001 tools?
No. Ambiguous MCP covers mail, chat, calendar, tasks, documents, wiki, CRM, drive, and analytics, and the docs list every tool. Filter by tool name in listScopedTools to give an agent only the area it needs, such as ambiguousmcp_search_mail and ambiguousmcp_create_task.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""ambiguousmcp"": {
""url"": ""https://mcp.scalekit.com/ambiguousmcp"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.ambiguousmcp]
url = ""https://mcp.scalekit.com/ambiguousmcp""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""ambiguousmcp"": {
""url"": ""https://mcp.scalekit.com/ambiguousmcp"",
""type"": ""http""
}
}
}