# Obriym CRM (remote · obriym-crm.com)

Operate Obriym CRM from your AI assistant: leads, deals, orders, products, dashboard, reports.

- Trust score: 83/100 (high trust)
- Change this week: +8
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `obriym-crm.com`: 83/100 (this document), [markdown](https://verifymcp.io/servers/com-obriym-crm-mcp/api-mcp.md), [page](https://verifymcp.io/servers/com-obriym-crm-mcp/api-mcp)

## Channel facts

- Endpoint: `https://obriym-crm.com/api/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.3.5`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 94/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 80/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 6291 tokens (~149/item across 42 items; 42 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### Claude

```bash
claude mcp add --transport http com-obriym-crm-mcp https://obriym-crm.com/api/mcp
```

### Codex

```toml
[mcp_servers.com-obriym-crm-mcp]
url = "https://obriym-crm.com/api/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-obriym-crm-mcp": {
      "type": "remote",
      "url": "https://obriym-crm.com/api/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-obriym-crm-mcp --url https://obriym-crm.com/api/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-obriym-crm-mcp:
    url: "https://obriym-crm.com/api/mcp"
```

### Other

```json
{
  "mcpServers": {
    "com-obriym-crm-mcp": {
      "type": "http",
      "url": "https://obriym-crm.com/api/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 83, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-01 (score 82, +1)

- [security] Tool “remove_order_item” is now declared destructive
- [security] Tool “update_company” is now declared destructive
- [security] Tool “update_contact” is now declared destructive
- [security] Tool “update_lead” is now declared destructive
- [security] Tool “update_order_item” is now declared destructive
- [security] Tool “update_order_status” is now declared destructive
- [security] Tool “assign_lead” is now declared destructive
- [security] Tool “complete_activity” is now declared destructive
- [security] Tool “configure_pipeline” is now declared destructive
- [security] Tool “convert_lead” is now declared destructive
- [security] Tool “select_workspace” is now declared destructive
- [security] Tool “set_lead_sources” is now declared destructive
- [security] Tool “transition_deal” is now declared destructive
- [functional] Server version: 1.3.4 → 1.3.5

### 2026-07-31 (score 81, +5)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 76, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-28 (score 76, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 75, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 74)

First indexed and scored.

## MCP tools (42)

### `search_leads` (~336 tokens)

Search leads

List and search this workspace's leads, filtered by text/status/source/created-date/stale and paginated. Returns summary rows (id, name, contact, company, status, source, assignee, tags, next-action, isStale, timestamps) plus pagination { page, perPage, total }, newest first. Use get_lead to fetch notes, position and score for one lead by id.

Input parameters:

- `from` (string): Only leads created at or after this ISO 8601 timestamp (e.g. 2026-01-31T00:00:00Z).
- `page` (integer): 1-based page number of results to return. Default 1.
- `perPage` (integer): Number of results per page (1-100). Default 20.
- `q` (string): Free-text search over lead name, email, phone, or company. Omit for no text filter.
- `source` (string): Filter by lead source key (e.g. website, referral, telegram). Use list_lead_sources to see the workspace's keys. Omit for all sources.
- `stale`: Set true to return only stale leads: not unqualified/converted and either past their next-action date or untouched for more than 7 days.
- `status` (string): Filter by lead status. Omit to return every status. Allowed: new, contacted, qualified, unqualified, converted.
- `to` (string): Only leads created at or before this ISO 8601 timestamp (e.g. 2026-02-28T23:59:59Z).

### `get_lead` (~74 tokens)

Get lead

Fetch one CRM lead in the selected workspace by lead id, including status, source, assignee, tags, custom fields, score, notes and next action. Use search_leads first when you only know a name, email, phone or company.

Input parameters:

- `id` (string, required): The lead id returned by search_leads.

### `search_deals` (~248 tokens)

Search deals

List and search pipeline deals, filtered by stage/owner/company/contact/stale and paginated. Returns summary rows (id, title, stage, amount, probability, owner, company, contact, next-action, isStale) plus pagination { page, perPage, total }. Use get_deal to fetch one deal's full detail by id.

Input parameters:

- `companyId` (string): Filter to deals linked to this company id (from search_companies).
- `contactId` (string): Filter to deals linked to this contact id (from search_contacts).
- `ownerId` (string): Filter to deals owned by this workspace member's user id.
- `page` (integer): 1-based page number of results to return. Default 1.
- `perPage` (integer): Number of deals per page (1-100). Default 25.
- `q` (string): Free-text search over the deal title. Omit for no text filter.
- `stageId` (string): Filter to deals in this pipeline stage id (from list_pipeline_stages).
- `stale` (string): Set "true" to return only stale deals (past their next-action date or long untouched).

### `get_deal` (~65 tokens)

Get deal

Fetch one pipeline deal in the selected workspace by deal id, including stage, value, probability and linked company/contact data when present. Use search_deals first when you only know the title or related customer.

Input parameters:

- `id` (string, required): The deal id returned by search_deals.

### `list_orders` (~264 tokens)

List orders

List this workspace's orders, filtered by status/customer/created-date and paginated. Returns summary rows (externalId, status, currency, totalAmount, itemCount, timestamps) plus pagination { page, perPage, total }, newest first. Use get_order to fetch one order's full detail (line items, payments, shipments, returns) by externalId.

Input parameters:

- `customerExternalId` (string): Filter to one storefront customer by their externalId (the id from the source system). Omit to list all customers' orders.
- `from` (string): Only orders created at or after this ISO 8601 timestamp (e.g. 2026-01-31T00:00:00Z).
- `page` (integer): 1-based page number of results to return. Default 1.
- `perPage` (integer): Number of results per page (1-100). Default 20.
- `status` (string): Filter by order status. Omit to return every status. Allowed: pending, confirmed, processing, shipped, delivered, cancelled, refunded.
- `to` (string): Only orders created at or before this ISO 8601 timestamp (e.g. 2026-02-28T23:59:59Z).

### `get_order` (~59 tokens)

Get order

Fetch full order detail in the selected workspace by externalId, including line items, payments, shipments and returns. Use list_orders first when you only know the customer or date.

Input parameters:

- `externalId` (string, required): The order externalId returned by list_orders.

### `search_products` (~342 tokens)

Search products

List and search active catalog products, filtered by category/brand/price/stock/tag/type and paginated. Returns summary rows (id, name, sku, type, price, currency, unit, stock, category, brand) plus pagination { page, perPage, total }. Use get_product to fetch one product's full detail by id or SKU.

Input parameters:

- `brandId` (string): Filter to one brand by its id. Empty string means any brand.
- `categoryId` (string): Filter to one category by its id. Empty string means any category.
- `inStock` (string): Set "true" to return only products with stock available. Empty means include out-of-stock.
- `maxPrice` (number): Only products priced at or below this amount (workspace currency).
- `minPrice` (number): Only products priced at or above this amount (workspace currency).
- `page` (integer): 1-based page number of results to return. Default 1.
- `perPage` (integer): Number of products per page (1-100). Default 20.
- `q` (string): Free-text search over product name and SKU. Empty for no text filter.
- `sort` (string): Sort order. Empty uses the default order. Allowed: name_asc, name_desc, price_asc, price_desc, newest.
- `tag` (string): Filter to products carrying this tag. Empty means any tag.
- `type` (string): Filter by product type. Empty for any; "simple" or "bundle".
- `warehouseId` (string): Filter to products in one warehouse by its id. Empty means any warehouse.

### `get_product` (~96 tokens)

Get product

Fetch one catalog product in the selected workspace by product id or SKU — returned in any status (draft, active, or archived; check the status field), including price, stock, category and brand fields. Provide exactly one known identifier; use search_products first when unsure (search covers active products only).

Input parameters:

- `id` (string): The product id returned by search_products.
- `sku` (string): The product SKU returned by search_products.

### `get_dashboard_overview` (~54 tokens)

Get dashboard overview

Return the operational 'what needs attention today' snapshot for this workspace: active/qualified/stale lead counts, pipeline value, weighted forecast and overdue activities. Takes no arguments. Use get_report for period trend analytics instead.

### `get_report` (~181 tokens)

Get report

Return one aggregated analytics report over a period for this workspace, selected by the report parameter: lead_source_conversion, pipeline_velocity, team_performance, or revenue_trend. Each returns aggregated rows (no per-record data); days tunes the look-back for conversion/team reports and months the span for revenue_trend. Use get_dashboard_overview for today's operational snapshot instead.

Input parameters:

- `days`: Look-back window for conversion/team reports (default 90/30).
- `months` (integer): Number of months for the revenue-trend report (default 6).
- `report` (string, required): Which analytics report to return. lead_source_conversion: leads and conversion rate per source (uses days). pipeline_velocity: average time deals spend in each stage. team_performance: revenue and ac…

### `search_contacts` (~235 tokens)

Search contacts

List and search this workspace's contacts, filtered by company/owner/tag, sorted and paginated. Returns summary rows (id, firstName, lastName, email, phone, jobTitle, company, owner, tags) plus pagination { page, perPage, total }. Use get_contact to fetch one contact's full detail by id.

Input parameters:

- `companyId` (string): Filter to contacts at this company id (from search_companies).
- `ownerId` (string): Filter to contacts owned by this workspace member's user id.
- `page` (integer): 1-based page number of results to return. Default 1.
- `perPage` (integer): Number of contacts per page (1-100). Default 25.
- `q` (string): Free-text search over name, email and company. Omit for no text filter.
- `sortBy` (string): Field to sort by. Default name. Allowed: name, email, createdAt.
- `sortDir` (string): Sort direction. Default asc.
- `tag` (string): Filter to contacts carrying this tag. Omit for any tag.

### `get_contact` (~61 tokens)

Get contact

Fetch one CRM contact in the selected workspace by contact id, including company, owner, tags and communication fields when present. Use search_contacts first when you only know a name, email or phone.

Input parameters:

- `id` (string, required): The contact id returned by search_contacts.

### `search_companies` (~209 tokens)

Search companies

List and search this workspace's companies, filtered by industry/status/owner, sorted and paginated. Returns summary rows (id, name, industry, size, status, owner, contactCount) plus pagination { page, perPage, total }. Use get_company to fetch one company's full detail by id.

Input parameters:

- `industry` (string): Filter to companies in this industry. Omit for any industry.
- `ownerId` (string): Filter to companies owned by this workspace member's user id.
- `page` (integer): 1-based page number of results to return. Default 1.
- `perPage` (integer): Number of companies per page (1-100). Default 25.
- `q` (string): Free-text search over the company name. Omit for no text filter.
- `sortDir` (string): Sort direction by name. Default asc.
- `status` (string): Filter by relationship status. Omit for any. Allowed: prospect, active, inactive.

### `get_company` (~60 tokens)

Get company

Fetch one CRM company in the selected workspace by company id, including status, industry, owner and contact links when present. Use search_companies first when you only know the company name.

Input parameters:

- `id` (string, required): The company id returned by search_companies.

### `list_activities` (~340 tokens)

List activities

List this workspace's activities (tasks, calls, meetings, emails, notes), filtered by type/assignee/overdue/completion/linked-entity and paginated. Returns summary rows (id, type, title, priority, dueDate, completed, assignee, linked lead/contact/company/deal, isOverdue) plus pagination { page, perPage, total }. Use get_activity to fetch one activity's full detail by id.

Input parameters:

- `assignedTo` (string): Filter to activities assigned to this workspace member's user id.
- `companyId` (string): Filter to activities linked to this company id (from search_companies).
- `completed` (string): Filter by completion: "true" only completed, "false" only open. Omit for both.
- `contactId` (string): Filter to activities linked to this contact id (from search_contacts).
- `dealId` (string): Filter to activities linked to this deal id (from search_deals).
- `leadId` (string): Filter to activities linked to this lead id (from search_leads).
- `overdue` (string): Set "true" to return only overdue activities (past due date, not completed).
- `page` (integer): 1-based page number of results to return. Default 1.
- `perPage` (integer): Number of activities per page (1-100). Default 20.
- `q` (string): Free-text search over the activity title. Omit for no text filter.
- `type` (string): Filter by activity type. Omit for any. Allowed: task, call, meeting, email, note.

### `get_activity` (~66 tokens)

Get activity

Fetch one CRM activity in the selected workspace by activity id, including type, due date, completion state, assignee and linked entity. Use list_activities first when you only know the related lead/deal/contact.

Input parameters:

- `id` (string, required): The activity id returned by list_activities.

### `list_customers` (~263 tokens)

List customers

List CRM customers (companies with a won deal or delivered order), filtered by health/lifetime-value/won-deal count, sorted and paginated. Returns summary rows (companyId, name, health, lifetimeValue, wonDeals, lastActivity, owner) plus pagination { page, perPage, total }. Use get_customer to fetch one customer's detail by company id.

Input parameters:

- `health` (string): Filter by customer health. Omit for any. Allowed: healthy, at_risk, churned.
- `ltv` (string): Filter by lifetime-value bucket. Omit for any. Allowed: lt10k, 10k50k, gt50k.
- `ownerId` (string): Filter to customers owned by this workspace member's user id.
- `page` (integer): 1-based page number of results to return. Default 1.
- `perPage` (integer): Number of customers per page (1-100). Default 25.
- `q` (string): Free-text search over the customer company name. Omit for no text filter.
- `sortDir` (string): Sort direction by lifetime value. Default desc (highest first).
- `wonDealsMin` (integer): Only customers with at least this many won deals.

### `get_customer` (~62 tokens)

Get customer

Fetch one CRM customer summary in the selected workspace by company id, including health, lifetime value and won-deal metrics. Use list_customers first when you only know the company name.

Input parameters:

- `companyId` (string, required): The company/customer id returned by list_customers.

### `get_workspace_info` (~74 tokens)

Get workspace info

Show which account and workspace this connection operates: signed-in name/email (OAuth only), workspace name, plan, connection type, and granted scopes. Call this when the user asks 'which account or workspace am I connected to?'. Sign-in connections can use list_workspaces and select_workspace to see or change the bound workspace.

### `create_lead` (~224 tokens)

Create lead

Create a lead. Idempotent by externalId (re-sending the same externalId returns the existing lead). Requires an email or phone. Enforces the workspace plan limit; the result echoes the workspace it landed in. Use update_lead to change it afterward.

Input parameters:

- `companyName` (string): The lead's company name, if known. Optional.
- `email` (string): The lead's email. Provide email or phone (at least one).
- `externalId` (string, required): A stable unique id for this lead in your system — the idempotency key. Re-sending the same externalId returns the existing lead instead of creating a duplicate (e.g. 'mcp-<uuid>').
- `name` (string, required): The lead's full name or label. Required.
- `notes` (string): Free-text notes about the lead. Optional.
- `phone` (string): The lead's phone number. Provide email or phone (at least one).
- `source` (string): Lead source; fixed to "website" for MCP-created leads.

### `update_lead` (~79 tokens)

Update lead

Update fields on an existing lead by id. Provide a patch with at least one field. Use search_leads first to find the lead id. The result echoes the operating workspace.

Input parameters:

- `id` (string, required): The lead id returned by search_leads.
- `patch` (object, required): The lead fields to update; include at least one changed field.

### `create_deal` (~300 tokens)

Create deal

Create a pipeline deal. Requires a stageId, title, and next-action note. Use list_pipeline_stages for the stageId, and search_companies/search_contacts to link a company or contact. Enforces the workspace plan limit; the result echoes the operating workspace.

Input parameters:

- `amount` (string): Deal value as a decimal string, e.g. 1500.00. Optional.
- `companyId`: Company id to link the deal to (from search_companies); null/omit for none.
- `contactId`: Contact id to link the deal to (from search_contacts); null/omit for none.
- `expectedCloseDate`: Expected close date, ISO 8601. Optional.
- `lostReason`: Reason the deal was lost. Optional (required only for Closed-lost stages).
- `nextActionDate` (string, required): Next-action date, ISO 8601. Required.
- `nextActionNote` (string, required): What the next action on this deal is. Required.
- `notes`: Free-text notes on the deal. Optional.
- `ownerId`: User id of the workspace member to own the deal; null/omit for none.
- `probability` (integer): Win probability percent, 0-100. Optional (defaults from the stage).
- `stageId` (string, required): Pipeline stage id for the deal (from list_pipeline_stages). Required.
- `title` (string, required): Deal title. Required.

### `create_activity` (~310 tokens)

Create activity

Create an activity (task, call, meeting, email, or note). Must link to at least one lead, contact, company, or deal — use search_leads/search_contacts/search_companies/search_deals to get the entity id. The result echoes the operating workspace.

Input parameters:

- `assignedTo`: User id of the workspace member to assign the activity to; null/omit for unassigned.
- `companyId`: Company id to link the activity to (from search_companies). Link at least one entity.
- `contactId`: Contact id to link the activity to (from search_contacts). Link at least one entity.
- `dealId`: Deal id to link the activity to (from search_deals). Link at least one entity.
- `description`: Detailed description or notes. Optional.
- `dueDate`: Due date/time, ISO 8601. Optional.
- `leadId`: Lead id to link the activity to (from search_leads). Link at least one entity.
- `priority` (string): Priority. Optional. One of: low, medium, high.
- `recurrenceEndsAt`: When recurrence stops, ISO 8601. Optional; only meaningful with recurrenceRule.
- `recurrenceRule`: Recurrence rule: daily, weekly, or monthly. Optional (one-off if omitted).
- `title` (string, required): Short title of the activity. Required.
- `type` (string, required): Activity type. One of: task, call, meeting, email, note.

### `update_order_status` (~111 tokens)

Update order status

Move an order to a new status by externalId. Only valid transitions from the current status are allowed. Use list_orders to find the externalId and get_order to see the current status. The result echoes the operating workspace.

Input parameters:

- `externalId` (string, required): The order externalId returned by list_orders or create_order.
- `status` (string, required): The new order status. Only valid transitions from the current status are accepted. Allowed values: pending, confirmed, processing, shipped, delivered, cancelled, refunded.

### `create_contact` (~163 tokens)

Create contact

Create a contact (person). Use search_companies for the companyId to link an employer. Enforces the workspace plan limit and validates the company/owner links; the result echoes the operating workspace.

Input parameters:

- `companyId`: Company id to link this contact to (from search_companies). Optional.
- `email`: The contact's email address. Optional.
- `firstName` (string, required): The contact's first name. Required.
- `jobTitle`: The contact's job title. Optional.
- `lastName`: The contact's last name. Optional.
- `ownerId`: User id of the workspace member who owns this contact. Optional.
- `phone`: The contact's phone number. Optional.
- `tags` (array): Tags for segmentation. Optional.

### `update_contact` (~75 tokens)

Update contact

Update fields on a contact by id. Provide a patch with at least one field. Use search_contacts first to find the contact id. The result echoes the operating workspace.

Input parameters:

- `id` (string, required): The contact id returned by search_contacts.
- `patch` (object, required): The contact fields to update; include at least one changed field.

### `create_company` (~153 tokens)

Create company

Create a company (B2B account). The company name must be unique in the workspace. Enforces the workspace plan limit; the result echoes the operating workspace. Use search_companies first to avoid creating a duplicate.

Input parameters:

- `industry`: The company's industry. Optional.
- `name` (string, required): The company name. Required and unique within the workspace.
- `ownerId`: User id of the workspace member who owns this company. Optional.
- `size` (string): Company size band. Optional. One of: solo, small, medium, large, enterprise.
- `status` (string): Relationship status. Optional. One of: prospect, active, inactive.
- `website`: The company website URL. Optional.

### `update_company` (~77 tokens)

Update company

Update fields on a company by id. Provide a patch with at least one field. Use search_companies first to find the company id. The result echoes the operating workspace.

Input parameters:

- `id` (string, required): The company id returned by search_companies.
- `patch` (object, required): The company fields to update; include at least one changed field.

### `complete_activity` (~58 tokens)

Complete activity

Mark an activity (task, call, or meeting) as completed by its id. Use list_activities first to find the activity id. The result echoes the operating workspace.

Input parameters:

- `id` (string, required): The activity id returned by list_activities.

### `convert_lead` (~92 tokens)

Convert lead

Convert a lead into a contact, company, and/or deal (select at least one via the input flags). Sets the lead status to converted. Use search_leads first to find the lead id. The result echoes the operating workspace.

Input parameters:

- `id` (string, required): The lead id returned by search_leads.
- `input` (object, required): Conversion options that decide whether to create/link contact, company and deal records.

### `assign_lead` (~93 tokens)

Assign lead

Assign a lead to a workspace member by user id, or pass assignedTo=null to unassign. Use search_leads to find the lead id and get_workspace_info to confirm the operating workspace. The result echoes the operating workspace.

Input parameters:

- `assignedTo` (required): User id of the workspace member to assign the lead to. Pass null to unassign.
- `id` (string, required): The lead id returned by search_leads.

### `transition_deal` (~120 tokens)

Transition deal

Move a deal to a pipeline stage by its id. Closed-lost stages require a lostReason. Use search_deals for the deal id and list_pipeline_stages for the target stageId. The result echoes the operating workspace.

Input parameters:

- `id` (string, required): The deal id returned by search_deals.
- `lostReason`: Reason the deal was lost. Required when the target stage is a Closed-lost stage; otherwise omit.
- `stageId` (string, required): The target pipeline stage id to move the deal to (from list_pipeline_stages).

### `create_order` (~209 tokens)

Create order

Create an order with line items. Idempotent by externalId — use a stable unique id such as 'mcp-<uuid>' (re-sending returns the existing order). Enforces the workspace plan limit; the result echoes the operating workspace. Items snapshot productName/sku/unitPrice; use search_products first to quote real products.

Input parameters:

- `currency` (string): ISO 4217 currency code for the order (uppercase, e.g. UAH). Default UAH.
- `customer` (object): Optional buyer snapshot (name/email/phone, or a storefront customer externalId). Omit for an anonymous order.
- `externalId` (string, required): A stable unique id for this order in your system — the idempotency key. Re-sending the same externalId returns the existing order instead of creating a duplicate (e.g. 'mcp-<uuid>').
- `items` (array, required): Order line items (1-100). Each snapshots productName/sku/unitPrice.

### `add_order_item` (~192 tokens)

Add order item

Add a line item to an existing order by its externalId. Recomputes the order total. Use list_orders or create_order for the order externalId, and search_products to quote a real product. The result echoes the operating workspace.

Input parameters:

- `discount` (number): Percentage discount on this line (0-100). Default 0.
- `externalId` (string, required): The order externalId returned by list_orders or create_order.
- `productName` (string, required): Line item name, snapshotted onto the order. Use search_products to quote a real catalog product's name. Required.
- `quantity` (integer, required): Quantity ordered (integer, at least 1).
- `sku` (string): Product SKU snapshot (from search_products). Optional.
- `unitPrice` (required): Price per unit in the order currency, as a decimal (e.g. 199.99). Snapshotted onto the line.

### `update_order_item` (~114 tokens)

Update order item

Update a line item on an order (quantity, unit price, discount, name, or SKU). Recomputes the order total. Use get_order to find the order's externalId and the item's itemId. The result echoes the operating workspace.

Input parameters:

- `externalId` (string, required): The order externalId returned by list_orders or create_order.
- `itemId` (string, required): The order item id returned by get_order.
- `patch` (object, required): The order item fields to update; include at least one changed field.

### `remove_order_item` (~82 tokens)

Remove order item

Remove a line item from an order. Recomputes the order total. Use get_order to find the order's externalId and the item's itemId. The result echoes the operating workspace.

Input parameters:

- `externalId` (string, required): The order externalId returned by list_orders or create_order.
- `itemId` (string, required): The order item id returned by get_order.

### `list_pipeline_stages` (~64 tokens)

List pipeline stages

List this workspace's pipeline stages in order, with each stage's id, name, kind, default probability, WIP limit and position. Use configure_pipeline to change a stage, and the stage id here as the stageId for create_deal / transition_deal.

### `configure_pipeline` (~96 tokens)

Configure pipeline stage

Update an existing pipeline stage's name, default probability, or WIP limit. Provide the stage id (from list_pipeline_stages) and the fields to change. Stage order and terminal behavior are fixed. The result echoes the operating workspace.

Input parameters:

- `id` (string, required): The pipeline stage id returned by list_pipeline_stages.
- `patch` (object, required): Pipeline stage fields to update: name, default probability, WIP limit or position.

### `list_lead_sources` (~85 tokens)

List lead sources

List this workspace's lead sources (built-in plus custom), with each source's key, label and active state. Pass includeInactive to also return archived sources. Use set_lead_sources to add or archive a source; use a source key here as the source filter for search_leads.

Input parameters:

- `includeInactive` (boolean): Set true to include archived/inactive lead sources.

### `set_lead_sources` (~150 tokens)

Set lead source

Create or update a workspace lead source: set its label and active state by key (built-in or custom, lowercase_with_underscores). Idempotent — re-sending the same key updates it. Archiving the fallback 'other' source is not allowed. Use list_lead_sources to see current sources. The result echoes the operating workspace.

Input parameters:

- `isActive` (boolean, required): Whether the source is selectable for new leads. Set false to archive it (the fallback 'other' source cannot be archived).
- `key` (string, required): Stable source key, lowercase_with_underscores (built-in or custom).
- `label` (string, required): Human-readable label shown for this source in the UI.

### `list_workspaces` (~45 tokens)

List workspaces

List every workspace the connected user belongs to (id, name, role) and mark which one this connection currently operates. OAuth sign-in connections only. Use select_workspace to switch.

### `select_workspace` (~76 tokens)

Select workspace

Re-bind this OAuth connection to the workspace selected by the user. Takes effect on the next tool call. Use the organizationId returned by list_workspaces or by WORKSPACE_SELECTION_REQUIRED; never invent or guess it.

Input parameters:

- `organizationId` (string, required): The workspace organizationId chosen by the user from list_workspaces or WORKSPACE_SELECTION_REQUIRED.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-obriym-crm-mcp/api-mcp#diagnostics

## Score history

- 2026-08-03: 83
- 2026-08-02: 82
- 2026-08-01: 82
- 2026-07-31: 81
- 2026-07-30: 76
- 2026-07-29: 76
- 2026-07-28: 76
- 2026-07-27: 75
- 2026-07-26: 74

## Links

- Remote endpoint: https://obriym-crm.com/api/mcp
- Website: https://obriym-crm.com/integrations/mcp
- Changelog RSS feed: https://verifymcp.io/servers/com-obriym-crm-mcp/api-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-obriym-crm-mcp/api-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/com-obriym-crm-mcp/api-mcp
