Documentation Index
Fetch the complete documentation index at: https://docs.meetdoris.com/llms.txt
Use this file to discover all available pages before exploring further.
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 mcp add --transport http doris https://mcp.meetdoris.com/mcp
Claude Desktop
Add to your MCP config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"doris": {
"command": "npx",
"args": ["mcp-remote", "https://mcp.meetdoris.com/mcp"]
}
}
}
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:
{
"mcpServers": {
"doris": {
"serverUrl": "https://mcp.meetdoris.com/mcp"
}
}
}
The MCP server exposes 6 tools that mirror the REST API:
ontology_types
List all entity types or get the schema for a specific type.
| Parameter | Type | Required | Description |
|---|
type_name | string | No | Specific type to get schema for. Omit to list all types. |
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.
| Parameter | Type | Required | Description |
|---|
type_name | string | Yes | Entity type (e.g., deal, meeting, commitment) |
object_id | string | Yes | Entity ID |
expand | string[] | No | Related data to include (e.g., stakeholders, commitments) |
Available expand keys for deals: stakeholders, commitments, objections, competitors, meetings, strategy, emails, agent_summary, activity, insights, assessments, brief, artifacts, 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.
| Parameter | Type | Required | Description |
|---|
object_type | string | Yes | Type to list (e.g., deal, commitment) |
filters | object | No | Filter criteria (e.g., {"stage": "Discovery"}) |
sort | string | No | Sort field and direction (e.g., created_at:desc) |
expand | string[] | No | Related data to include |
limit | number | No | Max results (default 25, max 100) |
offset | number | No | Pagination offset |
Example prompt: “List all deals in the Negotiation stage with their commitments”
ontology_search
Full-text search across all entity types.
| Parameter | Type | Required | Description |
|---|
query | string | No | Free-text search query |
types | string[] | No | Restrict search to specific types |
filters | object | No | Filter criteria |
sort | string | No | Sort field and direction |
limit | number | No | Max results (default 25, max 100) |
offset | number | No | Pagination offset |
Example prompt: “Search for anything mentioning ‘pricing comparison’ across commitments”
ontology_batch
Resolve up to 50 entities in a single call.
| Parameter | Type | Required | Description |
|---|
refs | object[] | Yes | List of {"type": "...", "id": "..."} references |
Example prompt: “Get details on deals deal_1, deal_2, and deal_3”
ontology_traverse
Follow relationships from one entity to discover connected entities.
| Parameter | Type | Required | Description |
|---|
source_type | string | Yes | Type of the source entity |
source_id | string | Yes | ID of the source entity |
link_type | string | No | Filter by relationship type |
target_type | string | No | Filter by target entity type |
limit | number | No | Max results (default 50, max 200) |
Example prompt: “What entities are linked to this deal?”
Example Conversations
Once connected, you interact naturally:
You: “What commitments are overdue on the Acme deal?”
The AI calls ontology_resolve with type_name="deal", finds the Acme deal, then expands commitments and filters for overdue status.
You: “Prep me for my 2pm with Globex”
The AI calls ontology_search to find the Globex deal, then ontology_resolve with expand=["stakeholders", "commitments", "strategy", "meetings"] to assemble a full prep brief.
You: “Which deals have been in Discovery for more than 30 days?”
The AI calls ontology_list with object_type="deal" and filters={"stage": "Discovery"}, then checks days_in_current_stage on 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.
| Level | Names | Emails | Phones | LinkedIn |
|---|
| full | Adam Cross | adam.cross@minesoft.com | +44 7700 900123 | Included |
| masked (MCP default) | Adam C. | a***@minesoft.com | +44 *** *** 0123 | Omitted |
| anonymous | Evaluator #1 | Omitted | Omitted | Omitted |
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
| Field | Masked | Anonymous |
|---|
full_name | First name + initials (Adam C.) | Omitted — replaced by role ID |
email | First char + domain (a***@minesoft.com) | Omitted |
phone | Last 4 digits visible (+44 *** *** 0123) | Omitted |
linkedin_url | Omitted | Omitted |
owner_name | Preserved (your team) | Omitted |
owner_email | Preserved (your team) | Omitted |
sender / sender_email | Initialed / masked | Omitted |
When to use each level
| Level | Best for | Available via |
|---|
| full | Internal dashboards, your own analysis | REST API only |
| masked | AI assistants, external LLM tools | MCP (automatic), REST API |
| anonymous | Customer-facing exports, shared reports | REST API only |
Rate Limits
MCP shares the same rate limits as the REST API:
- 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 with MCP_DEV_MODE=true:
# Start the backend with dev mode
MCP_DEV_MODE=true make web
# Connect Claude Code to local server
claude mcp add --transport http doris-local http://localhost:5000/mcp
Dev mode accepts dev-token as a Bearer token without OAuth.