Overview
The Doris MCP server exposes the ontology as tools that AI assistants can call directly. Ask questions about deals, commitments, and stakeholders in natural language — the AI translates your question into the right ontology queries automatically. Endpoint:https://mcp.meetdoris.com/mcp
Transport: Streamable HTTP
Auth: OAuth 2.1 via your Doris login (Auth0). On first connection, a browser popup handles authentication.
Setup
Claude Code
Claude Desktop
Add to your MCP config (~/Library/Application Support/Claude/claude_desktop_config.json):
Cursor
Settings > Features > MCP > Add Server > Streamable HTTP >https://mcp.meetdoris.com/mcp
ChatGPT
Developer Mode > Add Connector >https://mcp.meetdoris.com/mcp
Windsurf
Add to your MCP configuration:Available Tools
The MCP server exposes 10 tools that mirror the REST API — eight read tools and two write tools:ontology_types
List all entity types or get the schema for a specific type.
Example prompt: “What entity types are available in Doris?“
ontology_resolve
Resolve a single entity by type and ID, with optional expand keys for related data.
Available expand keys for deals:
stakeholders, commitments, objections, competitors, meetings, strategy, emails, agent_summary, activity, insights, assessments, brief, pipeline_stages
Example prompt: “Show me the Acme deal with its stakeholders and open commitments”
ontology_list
List entities of a specific type with filtering, sorting, and expand support.
Example prompt: “List all deals in the Negotiation stage with their commitments”
ontology_search
Full-text search across all entity types.
Example prompt: “Search for anything mentioning ‘pricing comparison’ across commitments”
ontology_batch
Resolve up to 50 entities in a single call.
Example prompt: “Get details on deals deal_1, deal_2, and deal_3”
ontology_traverse
Follow relationships from one entity to discover connected entities.
Example prompt: “What entities are linked to this deal?“
ontology_aggregate
Group-by aggregation over an object type — counts and metrics bucketed by a field.
Example prompt: “How many deals are in each stage, and what’s the total value per stage?“
search_transcripts
Full-text search over meeting transcript turns — find exactly what was said and where.
Example prompt: “Every time security came up in the Acme calls, what was said?”
Write Tools
Writes are a deliberately small, self-describing surface — just two tools.ontology_update makes typed field writes; ontology_action runs named domain actions (e.g. completing a commitment, moving a plan card). You never need a new tool per entity: capabilities are discovered live through ontology_types, which advertises each type’s writable_fields and actions — including each action’s name, description, and JSON-Schema params_schema. As new writable types and actions ship, an AI assistant learns them automatically the next time it inspects the schema, with no client changes.
Writes require the
ontology:write scope. Reads only need ontology:read, which every token carries; ontology:write is granted only when your token actually holds it. A read-only token that calls a write tool is rejected with a forbidden error before anything is mutated.ontology_update
Write typed fields on an entity. Only the fields a type lists underwritable_fields are accepted — unknown or read-only fields are rejected (no mass-assignment).
Returns
{"ok": true, "id": ...} on success, or an error envelope (e.g. invalid_request, not_found, forbidden).
Example prompt: “Push the due date on this commitment to next Friday”
ontology_action
Run a named domain action on an entity. Each type advertises its actions (and their parameter schemas) viaontology_types.
Returns an
{"ok": true, ...} envelope on success (shape varies by action), or an error envelope.
First writable types and actions:
Example prompt: “Mark the security-review commitment on the Acme deal as done”
Guardrails
- No machine touches the buyer. Actions that could reach a buyer — such as
remindon a plan card — are flaggedbuyer_facingand are denied to automated/agent callers. MCP calls are treated as agent-initiated, so these actions returnforbidden; they only run on a human surface where a person initiates them. - Tenant-scoped. Every write is scoped to your tenant. The entity is loaded under your company before any mutation, so a request can never touch another tenant’s data — a foreign ID looks identical to a missing one (
not_found). - Role-aware. Some actions (e.g. all roundtable writes) require the caller to hold the right role at the entity, such as a rep seat at the room.
Example Conversations
Once connected, you interact naturally:You: “What commitments are overdue on the Acme deal?” The AI callsontology_resolvewithtype_name="deal", finds the Acme deal, then expandscommitmentsand filters for overdue status.
You: “Prep me for my 2pm with Globex” The AI callsontology_searchto find the Globex deal, thenontology_resolvewithexpand=["stakeholders", "commitments", "strategy", "meetings"]to assemble a full prep brief.
You: “Which deals have been in Discovery for more than 30 days?” The AI callsontology_listwithobject_type="deal"andfilters={"stage": "Discovery"}, then checksdays_in_stageon each result.
Privacy
The MCP server automatically masks personally identifiable information before data reaches your AI tool. This means contact emails, phone numbers, and LinkedIn URLs are never exposed to external LLM providers.MCP connections always use masked mode. This is enforced server-side and cannot be changed per-request. For full or anonymous access, use the REST API with the
?privacy= query parameter.How masking works
- No setup required — Masking is on by default for all MCP consumers.
- Deal owners preserved — Your team’s names and emails on deals remain visible in masked mode, so you always know who owns a deal.
- Expand keys respected — Stakeholder and email expansions are masked. Non-PII data (commitments, objections, competitors, strategy) passes through unchanged.
- Anonymous mode — Stakeholders are replaced with role-based identifiers (e.g., “Champion #1”, “Evaluator #2”) and the email expansion is omitted entirely. Only available via the REST API.
Which fields are masked
When to use each level
Rate Limits
MCP uses the same tenant-level daily quota as the REST API, with endpoint-specific minute limits:- 10,000 requests/day per tenant
- 300 req/min for resolve, list, and type operations
- 120 req/min for search
- 60 req/min for batch
Local Development
For local testing withMCP_DEV_MODE=true:
dev-token as a Bearer token without OAuth.