Obriym CRM
REMOTE · OBRIYM-CRM.COM
Operate Obriym CRM from your AI assistant: leads, deals, orders, catalog, stock, marketplaces.
Available components
Last scanned (16 hours ago)
Scores higher than 98% of remote servers
Reachable. Last reached 5 Nov 2026.
Category CRM and Sales
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. How we score → Why this is hard to score →
Endpoint Security94
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- 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. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability79
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 26080 tokens (~230/item across 113 items; 113 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management99
- Stability check failed: schema churn in the 30 days we've observed: 0 tool removals, 1 breaking changes, 0 auth/transport breaks, 38 additions. See how to fix → Fail
Tool Coverage97
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 91% of tool parameters carry a description.Partial
Tool Safety50
- Injection-marker check failed: the description of tool "publish_ebay_drafts" contains an instruction to conceal the call from the user, the text "Never tell the user", at byte 411 of that field. See how to fix → Fail
- All 12 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 114 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Checks we ran (13)
- TLS certificate
- Authorization
- HTTPS
- HSTS header
- DNSSEC
- Transport
- Schema quality
- Stability
- Tool coverage
- Injection markers
- Destructive annotations
- Judged manipulation
- MCP protocol
Does not apply to this hosted endpoint (2)
- Supply Chain SecurityScored on package channels only. This is a hosted endpoint, so there is nothing to install or inspect.
- Provenance & TransparencyScored on package channels only. This is a hosted endpoint, so there is nothing to install or inspect.
The score does not measure everything. What the score does not measure →
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 26 Oct 26 0
- Tool “get_customer” rewrote its description, which is the text the model reads security
- Tool “list_customers” rewrote its description, which is the text the model reads security
- Tool “list_people_customers” rewrote its description, which is the text the model reads security
- Tool “publish_ebay_variation_listing” rewrote its description, which is the text the model reads security
- Tool “save_ebay_variation_listing” rewrote its description, which is the text the model reads security
- Server version: 1.20.0 → 1.21.0 functional
- “list_orders” reworded the description of “status” cosmetic
- “search_products” reworded the description of “sort” cosmetic
- “update_order_status” reworded the description of “status” cosmetic
- 20 Oct 26 0
- New tool “push_google_merchant_catalog”, which the server declares destructive security
- Tool “get_marketplace” rewrote its description, which is the text the model reads security
- Tool “list_marketplaces” rewrote its description, which is the text the model reads security
- Tool “get_product” rewrote its description, which is the text the model reads security
- Tool “search_products” rewrote its description, which is the text the model reads security
- Tool “get_customer” rewrote its description, which is the text the model reads security
- Tool “list_customers” rewrote its description, which is the text the model reads security
- Server version: 1.19.0 → 1.20.0 functional
- Server version: 1.18.1 → 1.19.0 functional
- Server version: 1.18.0 → 1.18.1 functional
- New tool “get_person_customer” functional
- New tool “list_people_customers” functional
- “search_products” added an optional parameter “supplierId” cosmetic
- “search_products” added an optional parameter “supplierStock” cosmetic
- “check_channel_readiness” reworded the description of “platform” cosmetic
- “get_marketplace” reworded the description of “platform” cosmetic
- “list_channel_products” reworded the description of “platform” cosmetic
- “list_customers” reworded the description of “wonDealsMin” cosmetic
- 18 Oct 26 0
- Tool “list_content_channels” rewrote its description, which is the text the model reads security
- Tool “list_published_posts” rewrote its description, which is the text the model reads security
- Server version: 1.17.0 → 1.18.0 functional
- “list_published_posts” reworded the description of “channel” cosmetic
- 17 Oct 26 −1
- Stability: pass → fail ▼ security
- Tool “add_order_item” rewrote its description, which is the text the model reads security
- Tool “create_order” rewrote its description, which is the text the model reads security
- Tool “update_order_item” rewrote its description, which is the text the model reads security
- “create_order” made “currency” required, so existing callers break ▼ functional
- Server version: 1.16.2 → 1.17.0 functional
- New tool “quote_order_promotion” functional
- “create_order” added an optional parameter “promotion” cosmetic
- “create_order” reworded the description of “currency” cosmetic
- “create_order” dropped the optional parameter “discountAmount” cosmetic
- “create_order” dropped the optional parameter “promoCode” cosmetic
- 15 Oct 26 0
- Tool “create_company” rewrote its description, which is the text the model reads security
- Tool “update_company” rewrote its description, which is the text the model reads security
- Server version: 1.16.0 → 1.16.2 functional
- “create_company” added an optional parameter “bankName” cosmetic
- “create_company” added an optional parameter “counterpartyType” cosmetic
- “create_company” added an optional parameter “creditLimit” cosmetic
- “create_company” added an optional parameter “creditLimitCurrency” cosmetic
- “create_company” added an optional parameter “deliveryAddress” cosmetic
- “create_company” added an optional parameter “edrpou” cosmetic
- “create_company” added an optional parameter “email” cosmetic
- “create_company” added an optional parameter “iban” cosmetic
- “create_company” added an optional parameter “legalAddress” cosmetic
- “create_company” added an optional parameter “paymentTermsDays” cosmetic
- “create_company” added an optional parameter “phone” cosmetic
- “create_company” added an optional parameter “representationState” cosmetic
- “create_company” added an optional parameter “tags” cosmetic
- “create_company” added an optional parameter “taxGroup” cosmetic
- “create_company” added an optional parameter “taxSystem” cosmetic
- “create_company” added an optional parameter “vatNumber” cosmetic
- “create_company” added an optional parameter “vatPayer” cosmetic
- “create_contact” added an optional parameter “documentRole” cosmetic
- 14 Oct 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Server version: 1.14.0 → 1.16.0 functional
- New tool “get_obriym_product_facts” functional
- 12 Oct 26 0
- New tool “delete_category”, which the server declares destructive security
- Tool “list_categories” rewrote its description, which is the text the model reads security
- Tool “create_category” rewrote its description, which is the text the model reads security
- Tool “list_content_channels” rewrote its description, which is the text the model reads security
- Tool “update_category” rewrote its description, which is the text the model reads security
- Server version: 1.13.0 → 1.14.0 functional
- New tool “get_category” functional
- New tool “get_lead_conversation” functional
- New tool “list_conversations” functional
- New tool “list_published_posts” functional
- New tool “search_marketplace_categories” functional
- “create_category” added an optional parameter “marketplaceCategories” cosmetic
- “create_category” reworded the description of “googleProductCategory” cosmetic
- 10 Oct 26 0
- Schema quality: 14432 → 21409 ▼ functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Probed https://obriym-crm.com/api/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=obriym-crm.com | CN=YR2,O=Let's Encrypt,C=US | 6 Oct 2026 | 4 Jan 2027 | RSA 2048 | SHA256-RSA | 63c2523d33c945df82b3ebfe0bf75ed1153 |
| SANs: obriym-crm.com | ||||||
| CN=YR2,O=Let's Encrypt,C=US (CA) | CN=Root YR,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | RSA 2048 | SHA256-RSA | 4ebd24947e24d394802d84a52fd5b319 |
| CN=Root YR,O=ISRG,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | RSA 4096 | SHA256-RSA | f24b6d17f9d9ad7cb1c9fea78782699f |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of obriym-crm.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | Trust anchor | 20326, 38696 | 8, 8 | Verified |
| com. | DS published | 19718 | 13 | Verified |
| obriym-crm.com. | No DS | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Enforced and verified
The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.
| Result | Enforced and verified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer error="invalid_token", error_description="Authentication required for this tool", resource_metadata="https://obriym-crm.com/.well-known/oauth-protected-resource"
Bearer error="invalid_token", error_description="Authentication required for this tool", resource_metadata="https://obriym-crm.com/.well-known/oauth-protected-resource" | Header | Value |
|---|---|
| strict-transport-security | max-age=63072000; includeSubDomains; preload |
| x-content-type-options | nosniff |
| x-frame-options | SAMEORIGIN |
| referrer-policy | strict-origin-when-cross-origin |
| permissions-policy | camera=(), microphone=(), geolocation=(), browsing-topics=() |
Protected resource metadata
| Document | https://obriym-crm.com/.well-known/oauth-protected-resource |
|---|---|
| Retrieved | Yes |
| Resource | https://obriym-crm.com/api/mcp |
| Authorisation server | https://obriym-crm.com/api/auth |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://obriym-crm.com/api/mcp | Verified | 200 | |
| http (plaintext) | http://obriym-crm.com/api/mcp | HTTPS enforced | 308 | https://obriym-crm.com/api/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
add_order_item Add order item ~263
Add a line item to an existing order by its externalId. Recomputes the order total. Only allowed while the order is pending or confirmed; on any other status (processing and later, cancelled, refunded) it fails with 409 CONFLICT "Order lines can only be changed while the order is pending or confirmed". Use list_orders or create_order for the order externalId, and search_products to quote a real product. The CRM recalculates shipping eligibility from the saved priced lines; a separate whole-order discount may require source-confirmed amount correction. The result echoes the operating workspace.
| Name | Type | Req | Description |
|---|---|---|---|
| discount | number | – | Percentage discount on this line (0-100). Default 0. |
| externalId | string | yes | The order externalId returned by list_orders or create_order. |
| productName | string | yes | Line item name, snapshotted onto the order. Use search_products to quote a real catalog product's name. Required. |
| quantity | integer | yes | Quantity ordered (integer, at least 1). |
| sku | string | – | Product SKU snapshot (from search_products). Optional. |
| unitPrice | – | yes | Price per unit in the order currency, as a decimal (e.g. 199.99). Snapshotted onto the line. |
No output schema declared.
No examples provided.
add_product_images Add product images ~336
Add photos to ONE product, after the photos it already has: public https image links (images, each with an optional caption), files the person attached in ChatGPT (files — ChatGPT fills it), or links returned by create_image_upload for files on the agent's own machine. Obriym downloads every image and stores its OWN COPY in the workspace's storage — the link may be temporary and nothing hotlinks to it. Limits: JPEG, PNG or WebP, at most 2 MB each (a bigger file is refused — there is no resize), at most 10 photos per product. All or nothing: if any link fails, or the total would exceed 10, nothing is stored and the reason is returned. Saves through the product form's own operation (version check, audit, channel updates). Not idempotent: repeating the call adds the photos again. Returns the product's full photo list { url, alt } — the first is the main photo. Use get_product first to see the current photos and update_product_images to reorder, caption or remove them. The result echoes the workspace.
| Name | Type | Req | Description |
|---|---|---|---|
| files | array | – | Image files the person attached in ChatGPT. ChatGPT fills this field itself; any other client leaves it out and passes image links instead (or uploads files with create_image_upload). |
| images | array | – | Photos to ADD after the product's current ones, in order. The product may hold at most 10 photos in total; a request that would exceed it is refused and nothing is stored. |
| productId | string | yes | The product id from search_products or get_product. |
No output schema declared.
No examples provided.
adjust_stock Adjust stock ~249
Move a product stock by a relative delta (negative to write off, positive to add) with a reason, and record it in the stock history. This is the correct tool for a correction, a write-off or damage — it never sets an absolute number, so an order committing at the same moment is not overwritten. The reason decides the direction: write_off, damage and return_to_supplier must carry a negative delta, opening_balance a positive one, while correction and other accept either; a delta that contradicts its reason is rejected. Any other word is your own vocabulary and is accepted in either direction. The product must already track inventory; a product that does not returns a conflict rather than having tracking switched on for it. A bundle also returns a conflict: its stock is derived from its components, so adjust each component instead. Pass a stable externalId to make a retry idempotent. The new stock is pushed to every connected sales channel. The result echoes the operating workspace.
| Name | Type | Req | Description |
|---|---|---|---|
| delta | integer | yes | – |
| externalId | string | – | – |
| metadata | object | – | – |
| note | string | – | – |
| productId | string | yes | – |
| reason | string | yes | – |
No output schema declared.
No examples provided.
apply_bulk_price_change Apply bulk price change ~408
Apply a bulk price change — step 2 of 2, after preview_bulk_price_change. Send the SAME rule, scope and target and the digest the preview returned, copied verbatim and never invented. The plan is recomputed from live prices and refused with CONFLICT if it no longer matches the digest (prices moved, or the rule would compound on a retry) — preview again and show the person the new numbers. Changes real prices: a selling price reaches connected channels where the owner armed price writes; a purchase cost is never published. Returns { affected, skipped }. Needs the owner's "AI may change prices in bulk" switch (Settings → Integrations → Connect AI); without it the call is refused and you should tell the person to ask the owner. Not idempotent for percent rules — never repeat a successful apply. Confirm with the person unless they asked for the change outright. Echoes the workspace.
| Name | Type | Req | Description |
|---|---|---|---|
| digest | string | yes | The digest returned by preview_bulk_price_change for THIS rule, scope and target — copied verbatim, never invented. If prices moved since, the apply returns CONFLICT and you must preview again. |
| rule | – | yes | HOW prices move. The target 'cost' accepts only op 'percent'. Pick the one that matches the request: a percent change, a fixed price, a markup over cost, a discount (and its end), or the old price. |
| scope | – | yes | WHICH products. Prefer a named container (category, brand, supplier, warehouse) when the person says 'all products of …' — it is read back by name in the preview. There is no free filter: a request l… |
| target | – | – | WHICH number moves. Omit it to change the product's own selling price. Use {field:'price', currency:'EUR'} for the euro price list, {field:'cost'} for the purchase cost. |
No output schema declared.
No examples provided.
archive_products Archive products ~187
Archive up to 100 products — this is how an AI client removes a product. It leaves sale and every sales channel's feed, and nothing is erased: update_product with status active or draft restores it. Hard deletion is not available over MCP. A product that a non-archived bundle is made of is NOT archived: it is listed in heldByBundle with the bundles that contain it — archive or change those bundles first. Archiving also asks Prom to take the product's listings down; notAttempted counts takedowns not reached in time. To end a live eBay listing use withdraw_ebay_listings. Returns { affected, skipped, notAttempted, heldByBundle } — skipped products were already archived. Idempotent. The result echoes the workspace.
| Name | Type | Req | Description |
|---|---|---|---|
| productIds | array | yes | The products to archive, at most 100 ids from search_products. |
No output schema declared.
No examples provided.
assign_lead Assign lead ~93
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.
| Name | Type | Req | Description |
|---|---|---|---|
| assignedTo | – | yes | User id of the workspace member to assign the lead to. Pass null to unassign. |
| id | string | yes | The lead id returned by search_leads. |
No output schema declared.
No examples provided.
bulk_set_ebay_fulfillment_policy Set eBay shipping policy for products ~302
Choose one eBay shipping (fulfillment) policy — or null for the connection default — for up to 25 products on one eBay site, with the same per-product rules as set_product_ebay_fulfillment_policy: no listing stores the choice; a draft or live listing has its offer updated in place and read back. The policy is checked against eBay once before any product is touched, and a product whose listing lives on another eBay site fails with marketplaceMismatch instead of being moved. Returns results per product (status updated, unchanged, saved, unverified or failed with the eBay error), counts and notAttempted (not reached in the time budget — call again with those ids). Refused until the workspace owner switches on AI publishing. Idempotent. The result echoes the workspace.
| Name | Type | Req | Description |
|---|---|---|---|
| fulfillmentPolicyId | – | yes | A fulfillmentPolicyId from list_ebay_fulfillment_policies, for the same marketplace. null removes the product's own choice so the connection default (then eBay's first policy) applies. |
| marketplaceId | string | – | The eBay MARKETPLACE id the policy belongs to, such as EBAY_IT. Omit it when the eBay connection sells on one site. A product whose eBay offer lives on another site is reported as failed, never moved. |
| productIds | array | yes | The products to change, at most 25 ids from search_products. |
No output schema declared.
No examples provided.
check_channel_readiness Check channel readiness ~233
Check locally which products a marketplace will refuse and why — missing price, unusable price, blank name, unmapped category — grouped by what fixes them, without calling the marketplace. The response separates `blocked` (these products do NOT go out) from `warnings` (these DO go out, but probably will not be published as the merchant expects: a price in a currency the platform does not name, no words of their own in a language the channel reads, a placeholder description, characteristics the marketplace does not recognise). Local checks exist for prom, rozetka, google_merchant and olx; other platforms report their connection state through get_marketplace instead. If the channel is not connected the call fails with NOT_FOUND ("<channel> is not connected in this workspace") instead of reporting an empty channel — use list_marketplaces to see which are connected. This never publishes anything: it reports what would happen.
| Name | Type | Req | Description |
|---|---|---|---|
| platform | string | yes | The marketplace slug returned by list_marketplaces (prom, rozetka, woocommerce, shopify, olx, amazon, ebay, google_merchant). |
No output schema declared.
No examples provided.
complete_activity Complete activity ~58
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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The activity id returned by list_activities. |
No output schema declared.
No examples provided.
configure_pipeline Configure pipeline stage ~149
Update an existing pipeline stage's name, default probability, or WIP limit. Provide the stage id (from list_pipeline_stages) and ONLY the fields to change — omitted fields keep their current value; wipLimit null removes the limit. A name cannot be blank and must be unique among stages (409 CONFLICT otherwise). Stages cannot be created here, and stage order and terminal behavior are fixed. The result echoes the operating workspace.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The pipeline stage id returned by list_pipeline_stages. |
| patch | object | yes | Pipeline stage fields to change: name, defaultProbability and/or wipLimit. Provide at least one; omitted fields are left as they are. |
No output schema declared.
No examples provided.
convert_lead Convert lead ~92
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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The lead id returned by search_leads. |
| input | object | yes | Conversion options that decide whether to create/link contact, company and deal records. |
No output schema declared.
No examples provided.
create_activity Create activity ~310
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | yes | Short title of the activity. Required. |
| type | string | yes | Activity type. One of: task, call, meeting, email, note. |
No output schema declared.
No examples provided.
create_brand Create brand ~273
Create a catalog brand with optional description, website and per-language description translations. The brand NAME is never translated: marketplaces match the vendor name verbatim, so send it exactly as the vendor is known. The slug is normalized to Latin. A name already used in this workspace is rejected, so call list_brands first to avoid duplicates. Translate only the brand's own description — add no facts the user did not give. The result is the created brand with its id (use it as brandId for create_product/update_product) and echoes the operating workspace.
| Name | Type | Req | Description |
|---|---|---|---|
| description | – | – | Brand description in the workspace's base language (up to 4000 characters). Send null to clear it. |
| name | string | yes | The brand name exactly as marketplaces know the vendor, up to 120 characters; unique in the workspace. Never translated. |
| slug | – | – | URL segment for the brand. Normalized to lowercase Latin letters, digits and hyphens whatever is sent; derived from the name when omitted. |
| translations | array | – | Brand description per locale (the brand NAME is never translated). Omit to leave existing translations untouched; when sent it REPLACES the whole set, so an empty array removes them all. |
| website | – | – | The brand's website as a full https:// URL. Send null to clear it. |
No output schema declared.
No examples provided.
create_category Create category ~513
Create a catalog category, optionally nested under an existing one, with optional description and per-language translations. The slug is normalized to Latin whatever is sent. The parent must exist in this workspace, and a name already used under the same parent is rejected, so call list_categories first to avoid duplicates. To link marketplace categories send marketplaceCategories ({ prom, rozetka, olx, amazon, google_merchant } with the id as a string, null to clear): look the ids up with search_marketplace_categories first and never guess them. The format is always checked on write, and against the marketplace while it is connected (OLX must be a leaf category; a Google id must exist in the Google taxonomy). Translate only the category's own name and description into each locale — add no facts the user did not give. The result is the created category with its id (use it as categoryId for create_product/update_product) and echoes the operating workspace.
| Name | Type | Req | Description |
|---|---|---|---|
| description | – | – | Prose a storefront shows at the top of the category shelf, in the workspace's base language (up to 4000 characters). Send null to clear it. |
| googleProductCategory | – | – | Google Product Taxonomy id or full path for this category (for Google Shopping). Prefer marketplaceCategories.google_merchant, which this field is an alias of; send the Google category in one place o… |
| marketplaceCategories | object | – | The category's id on each marketplace, keyed by platform. Omit a platform to leave it untouched, send null to clear it. Every value is checked on write (format always; against the marketplace itself… |
| name | string | yes | The category name in the workspace's base language, up to 120 characters. Must be unique among categories with the same parent. |
| parentId | – | – | Id of the parent category from list_categories, to nest this one under it; it must exist in this workspace. Omit or send null for a top-level category. |
| slug | – | – | URL segment for the category. Normalized to lowercase Latin letters, digits and hyphens whatever is sent (Cyrillic is transliterated); derived from the name when omitted. |
| translations | array | – | Category name (and optional description) per locale. Omit to leave existing translations untouched; when sent it REPLACES the whole set, so an empty array removes them all. |
No output schema declared.
No examples provided.
create_company Create company ~460
Create a company (B2B account). The company name must be unique in the workspace. representationState is explicitly declared (unspecified, works_alone, or has_representatives), never inferred from contacts; an individual always uses unspecified. Enforces the workspace plan limit; the result echoes the operating workspace. Use search_companies first to avoid creating a duplicate.
| Name | Type | Req | Description |
|---|---|---|---|
| bankName | – | – | The counterparty's bank name. Optional. |
| counterpartyType | string | – | Counterparty type: company, sole_trader, or individual. Defaults to company. |
| creditLimit | – | – | Maximum outstanding balance. Optional; requires creditLimitCurrency. |
| creditLimitCurrency | – | – | ISO currency for creditLimit. Required when creditLimit is set. |
| deliveryAddress | – | – | Delivery address. Optional. |
| edrpou | – | – | Tax identifier: 8-digit EDRPOU or 10-digit taxpayer number. Optional. |
| – | – | The company email. Optional. | |
| iban | – | – | The counterparty's IBAN. Optional. |
| industry | – | – | The company's industry. Optional. |
| legalAddress | – | – | Legal address. Optional. |
| name | string | yes | The company name. Required and unique within the workspace. |
| ownerId | – | – | User id of the workspace member who owns this company. Optional. |
| paymentTermsDays | – | – | Agreed payment term in days (0-365). Optional. |
| phone | – | – | The company phone. Optional. |
| representationState | string | – | Declared representation state: unspecified, works_alone, or has_representatives. Never inferred from contact count. |
| size | string | – | Company size band. Optional. One of: solo, small, medium, large, enterprise. |
| status | string | – | Relationship status. Optional. One of: prospect, active, inactive. |
| tags | array | – | Tags for segmentation. Optional. |
| taxGroup | – | – | Single-tax group. Only meaningful for a sole trader on the simplified system. |
| taxSystem | – | – | Tax system: simplified or general. Optional. |
| vatNumber | – | – | VAT payer identifier. Optional. |
| vatPayer | boolean | – | Whether the counterparty is a VAT payer. Optional. |
| website | – | – | The company website URL. Optional. |
No output schema declared.
No examples provided.
create_contact Create contact ~178
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.
| Name | Type | Req | Description |
|---|---|---|---|
| companyId | – | – | Company id to link this contact to (from search_companies). Optional. |
| documentRole | – | – | The contact's role on sales documents. Optional. |
| – | – | The contact's email address. Optional. | |
| firstName | string | yes | 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. |
No output schema declared.
No examples provided.
create_content_post Create post (draft) ~558
Create a social post as a DRAFT — nothing is published. Give it a working title, the main text, optional hashtags, the channels (each may carry its own text), and images: public https image links (Obriym stores its own copy), files the person attached in ChatGPT (the `files` field, filled by ChatGPT), links returned by create_image_upload for local files, and/or a catalog product whose photos are attached and whose sell-out later marks the live Telegram and Threads post as sold. Each channel's text, with hashtags, must fit that channel's limit (list_content_channels). Returns the post id and warnings — a channel that is not ready, Instagram without an image — to relay to the person. Not idempotent: each call creates a new draft. Then use schedule_content_post or publish_content_post. Echoes the workspace.
| Name | Type | Req | Description |
|---|---|---|---|
| channels | array | yes | Where the post goes — one entry per channel, each at most once. Every channel publishes the main text unless its entry carries its own text. |
| files | array | – | Image files the person attached in ChatGPT. ChatGPT fills this field itself; any other client leaves it out and passes image links instead (or uploads files with create_image_upload). |
| format | string | – | post = a regular feed post; story = an Instagram/Facebook story, which needs an image. Defaults to post. |
| hashtags | array | – | Hashtags without the "#" sign, at most 30. They are appended to every channel's text as their own line. |
| imageUrls | array | – | Images to attach, as public https links to JPEG, PNG or WebP files of at most 2 MB each. Obriym downloads and keeps its own copy, so the link only has to work now. Threads accepts JPEG and PNG only. |
| productId | string | – | A catalog product this post advertises (id from search_products). Links the post to the product, so when it sells out Obriym marks the live Telegram and Threads post as sold, and lets productPhotos a… |
| productPhotos | boolean | – | With productId: attach the product's own photos after any imageUrls, up to 10 images in total. Set false to post without them. |
| text | string | – | The post's main text, in the language the audience reads. Plain text: no markdown, links are written out in full. Never invent a price, discount, stock level or date — state only facts the user or th… |
| title | string | yes | An internal working title shown in Obriym's Publications list, e.g. "Monday — new arrivals". Never published. |
No output schema declared.
No examples provided.
create_deal Create deal ~300
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | yes | Next-action date, ISO 8601. Required. |
| nextActionNote | string | yes | 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 | yes | Pipeline stage id for the deal (from list_pipeline_stages). Required. |
| title | string | yes | Deal title. Required. |
No output schema declared.
No examples provided.
create_ebay_drafts Create eBay drafts ~277
Create eBay DRAFT offers for up to 25 products — real writes to the seller's eBay account, but nothing is buyer-visible until publish_ebay_drafts. Run inspect_ebay_listings first and pass only products whose nextAction is create_draft and ready is true. Each product is attempted on its own: returns created, failed (each with a reason to look up in remediation.ebayPlaybook) and notAttempted (not reached in the time budget — call again with those ids). Refused until the owner switches on AI publishing, and while draft creation is not armed on the eBay connection. Not idempotent: a product that already has a draft fails with alreadyListed. The result echoes the workspace.
| Name | Type | Req | Description |
|---|---|---|---|
| marketplaceId | string | – | Omit this when the eBay connection sells on exactly one marketplace — the server fills it in automatically. Pass one of the audit's armed ebayDraftSetup.marketplaceIds only when several marketplaces… |
| productIds | array | yes | The exact products to create eBay draft offers for, at most 25 ids fetched with search_products. This creates drafts only and never makes them live. |
No output schema declared.
No examples provided.
create_image_upload Create image upload links ~228
Get one-time links for uploading image FILES from the agent's own machine — for clients that can read local files and send HTTP requests (Claude Code, Cursor, scripts). A chat client passes image links instead, and ChatGPT passes attached files itself through the files field. For each link, send the raw file bytes with HTTP PUT within 15 minutes — for example: curl -X PUT --data-binary @photo.jpg "<uploadUrl>". One file per link; JPEG, PNG or WebP, at most 2 MB each (a bigger file is refused — there is no resize). The PUT answers JSON with url: pass that url to add_product_images (images[].url), create_content_post (imageUrls), set_category_image or set_brand_image (url), which store their own copy. Creating links changes nothing in the CRM. Returns { uploads: [{ uploadUrl, expiresAt }], maxBytes, allowedTypes }. Needs products:write or content:write.
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | How many upload links to create — one per file, at most 10. |
No output schema declared.
No examples provided.
create_lead Create lead ~224
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.
| Name | Type | Req | Description |
|---|---|---|---|
| companyName | string | – | The lead's company name, if known. Optional. |
| string | – | The lead's email. Provide email or phone (at least one). | |
| externalId | string | yes | 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 | yes | 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. |
No output schema declared.
No examples provided.
create_order Create order ~412
Create an order with line items. Currency is required: use trusted source facts or CRM product prices; never guess or convert. Idempotent by externalId: re-sending the same request returns the existing order. Counts toward the plan's monthly order limit (403 PLAN_LIMIT_EXCEEDED when reached). The result echoes the operating workspace. Use search_products first. For a promo code use quote_order_promotion, then send promotion.code and promotion.expectedTotal. CRM alone calculates discounts, net totals, usage limits and free shipping. Do not invent a discount, send a legacy discountAmount, or promise free shipping from your own arithmetic.
| Name | Type | Req | Description |
|---|---|---|---|
| currency | string | yes | Required ISO 4217 currency code from the source facts or selected CRM product prices. Never guess or convert between currencies. |
| customer | object | – | Optional buyer snapshot (name/email/phone, or a storefront customer externalId). Omit for an anonymous order. |
| delivery | object | – | How the buyer asked to receive the order: carrier, branch/courier/pickup, branch text, recipient, cash-on-delivery and a delivery note. This is the buyer's choice at checkout — it does not dispatch a… |
| externalId | string | yes | 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 | yes | Order line items (1-100). Each snapshots productName/sku/unitPrice. |
| notes | string | – | Internal note stored on the order. For a delivery instruction from the buyer use delivery.comment instead. |
| promotion | object | – | Ask the CRM to validate and calculate this promo code. Do not supply promoCode, discountAmount or shippingThresholdAmount alongside it. An optional expectedTotal refuses a changed quote; the server a… |
No output schema declared.
No examples provided.
create_product Create product ~778
Create a catalog product. Defaults to draft status — publish it by sending status 'active' once it is complete. Use list_categories, list_brands and list_warehouses for the ids; SKU is generated when omitted and must be unique in the workspace. Set trackInventory with an opening stock to start counting units, which is recorded as the first movement in the product stock history. A bundle (type bundle with bundleItems) holds no stock of its own: its stock, tracking and cost are derived from its components, so a stock sent for it is refused and trackInventory/costPrice are ignored. If the target warehouse is set to list new products on the marketplaces, this product joins those channels. When productGroupId names an existing product model, the product joins that model as a new article and takes the model's shared content (name, description, category, brand, characteristics, translations) instead of the values sent. Enforces the workspace plan limit; the result echoes the operating workspace.
| Name | Type | Req | Description |
|---|---|---|---|
| ageGroup | – | – | – |
| brandId | – | – | – |
| bundleItems | array | – | Components of a bundle (type bundle only): simple, non-archived products of the bundle's warehouse, each listed once. Selling the bundle deducts these components; the bundle's stock is how many whole… |
| categoryId | – | – | – |
| color | – | – | – |
| compareAtPrice | – | – | – |
| condition | – | – | – |
| costCurrency | – | – | – |
| costPrice | – | – | Purchase price per unit, in costCurrency. Ignored for a bundle: its cost is the sum of its components' costs when all are known and in one currency. |
| depth | – | – | – |
| description | – | – | – |
| dimensionUnit | – | – | – |
| ean | – | – | GTIN/EAN-8/12/13/14 barcode. Presence-and-shape validation only, no checksum. |
| gender | – | – | – |
| height | – | – | – |
| images | array | – | The product's photos as { url, alt }, at most 10; the first is the main photo. On an update the list you send replaces the whole set. An entry whose url equals a photo the product already has keeps t… |
| material | – | – | – |
| mpn | – | – | Manufacturer part number — the maker's own code for the item, not the shop SKU. eBay requires it beside the brand in many categories. |
| name | string | yes | – |
| pattern | – | – | – |
| price | – | – | – |
| productGroupId | – | – | – |
| size | – | – | – |
| sizeSystem | – | – | – |
| sizeType | – | – | – |
| sku | – | – | – |
| status | string | – | – |
| stock | – | – | Units on hand, for a product that tracks inventory; a change on update is recorded as a relative movement in the stock history. Refused for a bundle — its stock is derived from its components. |
| supplierId | – | – | – |
| tags | array | – | – |
| trackInventory | boolean | – | Whether the product counts units. Ignored for a bundle: it tracks stock exactly when one of its components does. |
| type | string | – | simple, or bundle — one sellable item made of bundleItems, holding no stock of its own. Fixed at creation: an update that changes it is refused. |
| unit | – | – | – |
| videos | array | – | Video links for the product page (YouTube, Vimeo or a direct file), https only, at most 5. Links, not uploads. On update, sending the field replaces the whole list. |
| warehouseId | – | – | – |
| weight | – | – | – |
| weightUnit | – | – | – |
| width | – | – | – |
No output schema declared.
No examples provided.
delete_category Delete category ~138
Permanently delete ONE catalog category by id. Its products are NOT deleted but lose this category (so they also drop out of marketplace feeds that require a category); its subcategories move to the top level; its translations and linked marketplace category ids are removed. NOT reversible. Not idempotent in effect: a second call for the same id returns NOT_FOUND. Call get_category first to read productCount and subcategoryCount, and confirm with the user before deleting a category that has products. The result reports productsUncategorized and subcategoriesMovedToRoot and echoes the operating workspace.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The category id returned by list_categories. |
No output schema declared.
No examples provided.
delete_content_post Delete post ~100
Delete a post that has not been published — a draft, a scheduled post (its schedule goes with it) or one whose every channel failed. Its own stored images are deleted too; a linked product's photos are never touched. Refused for a post that went out on any channel: that record stays. This cannot be undone. Echoes the workspace.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The publication id returned by create_content_post or list_content_posts. |
No output schema declared.
No examples provided.
delete_ebay_drafts Delete eBay drafts ~149
Delete the eBay DRAFT offer of up to 25 products; a live listing is refused — end it with withdraw_ebay_listings first. The CRM product itself is untouched. Works even while draft creation is disarmed on the connection, but still needs the owner's AI publishing switch. Returns done, failed and notAttempted. The result echoes the workspace.
| Name | Type | Req | Description |
|---|---|---|---|
| productIds | array | yes | Delete the eBay DRAFT offer for each of these products, at most 25 ids fetched with search_products. Only a product whose offer is still a draft is affected — a LIVE listing is refused; end it with w… |
No output schema declared.
No examples provided.
delete_ebay_variation_draft Delete a model's eBay variation draft ~148
Delete a model's UNPUBLISHED eBay multi-variation draft: every variation's offer and the inventory item group are removed from eBay; the articles stay on the channel, ready for a new listing (together or one by one). A live listing is refused — end it with withdraw_ebay_variation_listing first. Refused until the workspace owner switches on AI publishing. Returns deleted. The result echoes the workspace.
| Name | Type | Req | Description |
|---|---|---|---|
| model | string | yes | The product model: its code — the productGroupId get_product and search_products return for every article of it — or its id. Its active articles on the eBay channel become the listing's variations. |
No output schema declared.
No examples provided.
get_activity Get activity ~66
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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The activity id returned by list_activities. |
No output schema declared.
No examples provided.
get_category Get category ~115
Fetch one catalog category by id: name, slug, parent, description, image, translations, the linked marketplace category ids (marketplaceCategories: Prom, Rozetka, OLX, Amazon, Google Merchant, each { id, label } or null), its direct subcategories (children), and productCount and subcategoryCount. Read-only. Use list_categories first to find the id, and call this before delete_category to see what a deletion would affect.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The category id returned by list_categories. |
No output schema declared.
No examples provided.
get_company Get company ~60
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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The company id returned by search_companies. |
No output schema declared.
No examples provided.
get_contact Get contact ~61
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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The contact id returned by search_contacts. |
No output schema declared.
No examples provided.
get_content_post Get post ~123
Read one social post: its main text, hashtags, images, linked product, status and schedule, and per channel the text that channel gets (ownText or the main text), its length against the channel limit, whether the channel is ready, and what publishing returned there — status, link to the live post (permalink) or the network's error. Read-only. Use list_content_posts to find the id; call it after publish_content_post to report the links.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The publication id returned by create_content_post or list_content_posts. |
No output schema declared.
No examples provided.
get_customer Get customer ~159
Fetch one CRM customer summary in the selected workspace by company id: a company that bought (a purchase order — processing, ready to ship, shipped, delivered or refunded, or with a settled payment — or a won deal that never became an order). Returns health, lifetimeValue (completed-order revenue plus won deals without an order), purchases (purchase orders plus won deals without an order), repeat (two or more purchases), lastPurchaseAt and wonDealsCount (every won deal). Read-only; a company with no purchase is not found. Use list_customers first when you only know the company name; use get_person_customer for a person who bought without a company.
| Name | Type | Req | Description |
|---|---|---|---|
| companyId | string | yes | The company/customer id returned by list_customers. |
No output schema declared.
No examples provided.
get_dashboard_overview Get dashboard overview ~54
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_deal Get deal ~65
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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The deal id returned by search_deals. |
No output schema declared.
No examples provided.
get_ebay_offer_policies Get eBay offer policies ~164
Read the eBay offers of up to 25 products live and return, per offer, the fulfillment, payment and return policy ids it carries now, the shipping policy name, its eBay site and status (PUBLISHED = live, UNPUBLISHED = draft), and matchesAssignment — whether it carries the product's own choice in the CRM (null when the product has none). Products with no draft or live listing are listed in withoutOffer; notAttempted were not reached in the time budget — call again with those ids. Reads only. Use get_product_ebay_fulfillment_policy for one product's full picture.
| Name | Type | Req | Description |
|---|---|---|---|
| productIds | array | yes | The products whose eBay offers to read, at most 25 ids from search_products. |
No output schema declared.
No examples provided.
get_ebay_variation_listing Get a model's eBay variation listing ~196
Show a product MODEL as one eBay multi-variation listing: state (none, draft, live), marketplaceId, listingId and listingUrl, the stable groupKey, and every article of the model with its sku, colour, size, channelState on eBay and inclusion — included, not_active, not_on_channel (put it on the channel with set_channel_membership) or single_listing (it has its own eBay draft or listing, which must be deleted or ended first). Also says whether eBay is connected and whether the owner armed listing creation. Reads the CRM only. Use inspect_ebay_variation_listing for eBay's own checks before saving.
| Name | Type | Req | Description |
|---|---|---|---|
| model | string | yes | The product model: its code — the productGroupId get_product and search_products return for every article of it — or its id. Its active articles on the eBay channel become the listing's variations. |
No output schema declared.
No examples provided.
get_lead Get lead ~74
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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The lead id returned by search_leads. |
No output schema declared.
No examples provided.
get_lead_conversation Get lead conversation ~239
Read one lead's customer messages, oldest to newest: { at, channel, direction (inbound = from the customer, outbound = sent by the business), text (up to 2000 characters; truncated is true when cut), media ({ kind, contentType, name } or null — the file itself is never returned) }. A person who writes on two channels has two separate conversations: pass channel to read one, omit it to get all channels interleaved by time. Returns the most recent `limit` messages (default 30, max 100). Use it before drafting a reply or to answer what the customer asked. Read-only — this server cannot send messages. Use list_conversations to find leads with messages and get_lead for the lead card.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | string | – | Channel slug to read (e.g. instagram, telegram, olx), as returned by list_conversations. Omit for every channel. |
| leadId | string | yes | The lead id returned by list_conversations or search_leads. |
| limit | integer | – | How many of the newest messages to return (default 30). |
No output schema declared.
No examples provided.
get_marketplace Get marketplace ~251
Fetch one connected marketplace in detail: every adapter on it with its setup state, last poll, last poll error, last catalog-sync outcome (`sync`, whose `lastSuccessAt` is the last run without a connection error — it survives failures, so it says how long a channel has been broken) and last product import, a classified `problem` (kind, needsReconnect, platformMessage, whatToDo) when anything failed, plus the channel sales, leads and product counts. For google_merchant each adapter also has `setup`: setupBlock (what stands in the way: not_connected, no_account, no_country, no_terms, not_armed — owner setup, not an outage), armed, lastPreviewAt, feedLabel, currency, termsAccepted, productUrlTemplate and contentLanguageOverride. Reads stored state only, never calls the marketplace. Use list_marketplaces first to see which platforms are connected, list_channel_products for the products on the channel and check_channel_readiness for what would be refused.
| Name | Type | Req | Description |
|---|---|---|---|
| platform | string | yes | The marketplace slug returned by list_marketplaces (prom, rozetka, woocommerce, shopify, olx, amazon, ebay, google_merchant). |
No output schema declared.
No examples provided.
get_obriym_product_facts Read Obriym product facts ~172
Read-only facts about Obriym CRM itself: approved marketing claims, conditions, limitations, review sources, plan prices/limits and integration scenarios/readiness with beta caveats; no customer data or external calls, and implementation review does not establish workspace configuration or customer results (empty assets means no screenshot supplied). Call before writing about Obriym, narrow by topic, use list_content_channels for publishing readiness, list_published_posts to avoid repeated topics and get_content_post to inspect a draft or publication result.
| Name | Type | Req | Description |
|---|---|---|---|
| locale | string | – | Language of the approved claims and limitations: uk (default) or en. |
| topic | string | – | Topic to read, or all (default) for the full guide and topic index. Use integrations for channel readiness or pricing for current plan prices and limits. |
No output schema declared.
No examples provided.
get_order Get order ~59
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.
| Name | Type | Req | Description |
|---|---|---|---|
| externalId | string | yes | The order externalId returned by list_orders. |
No output schema declared.
No examples provided.
get_person_customer Get a person who bought ~112
Fetch one person who bought without a company, by contact id: health, lifetimeValue (completed-order revenue plus won deals without an order), purchases, repeat, firstPurchaseAt, lastPurchaseAt and contact details. Read-only; a contact who never bought without a company is not found. Use list_people_customers or search_contacts first when you only know the name, email or phone; use get_customer for a company.
| Name | Type | Req | Description |
|---|---|---|---|
| contactId | string | yes | The contact/customer id returned by list_people_customers. |
No output schema declared.
No examples provided.
get_product Get product ~195
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) — with every catalog field: prices, cost, stock and trackInventory, availability, variant fields, all attributes (characteristics) and translations, identifiers, weight and dimensions, images, videos, bundle components and related products; plus its model, warehouse and supplier by name, supplierOffers (what the supplier last said: quantity, restock date, purchase price, state), every sales channel with its listing and moderation state, the collections it is in and its model's review summary. A bundle's stock and cost are derived from its components. Provide exactly one known identifier; use search_products first when unsure (search covers active products only).
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | – | The product id returned by search_products. |
| sku | string | – | The product SKU returned by search_products. |
No output schema declared.
No examples provided.
get_product_ebay_fulfillment_policy Get a product's eBay shipping policy ~166
Show ONE product's eBay shipping policy. Per eBay site: assignedPolicyId (the product's own choice, null when it has none), defaultPolicyId (the connection default) and effectivePolicyId with effectiveSource — product, connection_default or first_available — the policy a new draft or a go-live would carry, plus that site's policies. For a product with a draft or live listing it also reads the eBay offer live: offer.fulfillmentPolicyId is what buyers see now. Reads only. Use list_ebay_fulfillment_policies for the costs of every policy and get_ebay_offer_policies to read several products' offers at once.
| Name | Type | Req | Description |
|---|---|---|---|
| productId | string | yes | A product id returned by search_products. |
No output schema declared.
No examples provided.
get_product_pricing Get product pricing ~208
Everything about ONE product's prices in one call: its own price, old price and currency; the price-list rows (other currencies); per-channel price overrides (platform, currency, price); wholesale quantity breaks per currency; the purchase cost with its currency (a bundle's cost is derived from its components and cannot be set on it); and the markup over cost per sale currency (marginPercent = price ÷ cost − 1, in percent; not a margin on the price) — the cost crossed at the workspace's stated rate, null with missingRate true when no rate is stated. Read-only. Use search_products for the id; call it before set_product_channel_price, set_product_price_tiers or upsert_product_prices so you change the right row, and after a change to confirm it. For a whole group of products use preview_bulk_price_change.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The product id returned by search_products or get_product — never a SKU or a name. |
No output schema declared.
No examples provided.
get_report Get report ~288
Return one aggregated analytics report over a period for this workspace, selected by the report parameter: lead_source_conversion, pipeline_velocity, team_performance, revenue_trend, product_sales (units, revenue and gross margin per brand/category/SKU) or stock_valuation (units on hand and their value per warehouse, per cost currency). Each returns aggregated rows (no per-record data); days tunes the look-back for lead_source_conversion, team_performance and product_sales, months the span for revenue_trend; pipeline_velocity and stock_valuation take no period. Use get_dashboard_overview for today's operational snapshot instead.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | yes | 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… |
No output schema declared.
No examples provided.
get_workspace_info Get workspace info ~146
Show which account and workspace this connection operates: signed-in name/email (OAuth only), workspace name, plan, connection type and granted scopes — and the server itself: its version and every tool it has now (server.tools), with how to refresh an AI app whose tool list is older (server.refreshHint). Call this when the user asks 'which account or workspace am I connected to?', and when the user asks for something your tool list has no tool for: if server.tools has it, your list is outdated — relay server.refreshHint instead of saying Obriym cannot do it. Sign-in connections can use list_workspaces and select_workspace to see or change the bound workspace.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
inspect_ebay_listings Inspect eBay listings ~264
Check up to 25 products against eBay before any write, with the same live preflight the CRM's eBay channel page and the real draft and publish calls run. Per product it returns the eBay state (off, member, draft, live, ended), nextAction (create_draft, publish_draft or none), whether that step is ready and, when not, the blocking reason with details. ebayDraftSetup lists the armed eBay sites and their currencies; remediation.ebayPlaybook maps every reason to the tool that fixes it; publishingEnabled says whether the owner allows AI to publish in this workspace. Reads eBay, never writes. Use search_products first for the ids; after a fix with update_product, upsert_product_prices, upsert_product_attributes or upsert_product_translation, call it again — a reason can change or clear.
| Name | Type | Req | Description |
|---|---|---|---|
| marketplaceId | string | – | Omit it when the eBay connection sells on one site — the server fills it in. Pass one of ebayDraftSetup.marketplaceIds only when several are armed. A MARKETPLACE id such as EBAY_IT, never the eBay co… |
| productIds | array | yes | The products to check, at most 25 ids from search_products. |
No output schema declared.
No examples provided.
inspect_ebay_variation_listing Check a model's eBay variation listing ~248
Run every check saving a model's eBay multi-variation listing would run, writing nothing: each article's required fields and price in the marketplace currency, the variation axes (colour and/or size, named as the eBay site names them), duplicate or missing variation values, the category (suggested from the title, or the saved listing's), whether it allows variations, item condition, required item specifics, one shipping policy for all articles, business policies and inventory location. Returns ready, marketplaceId, categoryId, axes, variationCount and issues (reason, message, skus). Needs a marketplace but not the owner's arming. Reads eBay. Use save_ebay_variation_listing once ready is true.
| Name | Type | Req | Description |
|---|---|---|---|
| marketplaceId | string | – | eBay marketplace id (EBAY_IT, EBAY_DE…) for a FIRST save, when the connection sells on several. A saved listing keeps its marketplace; omit it then. |
| model | string | yes | The product model: its code — the productGroupId get_product and search_products return for every article of it — or its id. Its active articles on the eBay channel become the listing's variations. |
No output schema declared.
No examples provided.
How do I install the Obriym CRM MCP server?
Obriym CRM is a hosted endpoint at https://obriym-crm.com/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · obriym-crm.com
claude mcp add --transport http com-obriym-crm-mcp 'https://obriym-crm.com/api/mcp'
What is the Obriym CRM MCP server?
Obriym CRM is an MCP server listed in the public MCP registry as com.obriym-crm/mcp. Operate Obriym CRM from your AI assistant: leads, deals, orders, catalog, stock, marketplaces. This page covers its hosted endpoint (https://obriym-crm.com/api/mcp).
Is the Obriym CRM MCP server safe to use?
Obriym CRM scores 90 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Obriym CRM MCP server expose?
Obriym CRM exposes 113 tools: search_leads, get_lead, list_conversations, get_lead_conversation, search_deals, and 108 more. Their descriptions and schemas cost roughly 25,704 tokens of context every time the server is loaded.
Does the Obriym CRM MCP server require authentication?
Yes. Obriym CRM asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.
Is the Obriym CRM MCP server still maintained?
Obriym CRM is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What did VerifyMCP test on the Obriym CRM MCP server?
VerifyMCP ran 13 checks on Obriym CRM, covering TLS certificate, Authorization, HTTPS, HSTS header and 9 more. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.