{"name":"com.relmcrm/relm","slug":"relmcrm-relm","title":"Relm CRM","description":"API-first CRM for LLMs - contacts, companies, deals and activities over a native MCP server.","url":"https://mcp.market/server/relmcrm-relm","rating":null,"grade":"C","score":56,"certified":false,"status":"active","category":"sales","tags":["sales"],"presence":{"score":8,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"uptime":{"percent":100,"checks":7,"ok":7,"last_checked_at":"2026-09-21T02:31:00.169Z","last_ok_at":"2026-09-21T02:31:00.169Z","latency_ms":158},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":null,"website":"https://relmcrm.com/","version":"0.17.1","remotes":[{"type":"streamable-http","url":"https://api.relmcrm.com/mcp"}],"packages":[],"tools":[{"name":"relm_automations_capabilities","description":"Discover the automation building blocks: valid trigger_events, condition ops, action types, channels/providers, and the shapes of automations/sequences/connections. Call before building a rule or sequence.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"relm_batch","description":"Run up to 100 record writes in ONE call (contact/company/deal/activity) - the fast path for imports/migrations. operations: [{object, method:create|update|delete, data|patch, id?}]. Returns a per-op result array (partial success). Every op still counts against your quota (batch saves round-trips, not quota).","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"operations":{"type":"array","items":{"type":"object","properties":{"object":{"type":"string"},"method":{"type":"string","enum":["create","update","delete"]},"data":{"type":"object"},"patch":{"type":"object"},"id":{"type":"string"}}}}},"required":["operations"]}},{"name":"relm_connect_channel","description":"Connect a BYO messaging channel so automations can send. channel='email', provider='resend', api_key=<your Resend key>, from='Team <hi@you.com>' (must be a verified Resend sender). The key is encrypted at rest.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"channel":{"type":"string"},"provider":{"type":"string"},"api_key":{"type":"string"},"from":{"type":"string"},"name":{"type":"string"}},"required":["api_key"]}},{"name":"relm_create","description":"Create a record. `data` is the object's fields (see relm_describe_schema). Custom fields must be registered first (relm_create_field). A contact needs at least one of: a name, an identifier (email/phone/linkedin_url), a company, or a custom field (email is unique per workspace) - don't invent a placeholder email.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"object":{"type":"string","enum":["contact","company","deal","activity"],"description":"Which core object."},"data":{"type":"object"}},"required":["object","data"]}},{"name":"relm_create_automation","description":"Create a single-step rule: when <trigger_event> [if <conditions>] then <actions>. conditions=[{field,op,value}] (ANDed), actions=[{type,...}]. Example: trigger_event='deal.stage_changed', conditions=[{field:'stage',op:'eq',value:'won'}], actions=[{type:'create_activity',body:'Deal won!'}]. See relm_automations_capabilities.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string"},"trigger_event":{"type":"string"},"conditions":{"type":"array"},"actions":{"type":"array"},"enabled":{"type":"boolean"}},"required":["name","trigger_event","actions"]}},{"name":"relm_create_enum_value","description":"Add a value to an enum group (e.g. group 'contact.type' value 'partner'). Idempotent; returns the full value set. Use this when relm_create rejects an unknown type with a valid_options list.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"group":{"type":"string"},"value":{"type":"string"},"label":{"type":"string"}},"required":["group","value"]}},{"name":"relm_create_field","description":"Register a new custom field on an object (contact/company/deal/activity). data_type: text|number|boolean|date|select|multiselect|currency|reference|email|url. Must be created before it can be written to a record.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"object":{"type":"string"},"key":{"type":"string"},"label":{"type":"string"},"data_type":{"type":"string"},"enum_group":{"type":"string"},"required":{"type":"boolean"}},"required":["object","key"]}},{"name":"relm_create_pipeline","description":"Create a pipeline. Optionally provide stages [{key,label}] (defaults to lead/qualified/proposal/won/lost) and is_default.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"is_default":{"type":"boolean"},"stages":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"type":{"type":"string","enum":["open","won","lost"]}}}}}}},{"name":"relm_create_sequence","description":"Create a multi-step drip sequence. trigger={event,filter:[{field,op,value}]} auto-enrolls the matching entity's contact; exit_when=[{field,op,value}] stops it (re-checked before every send); steps=[{wait_days,subject,body}] (first step wait_days:0 sends now). enroll_existing:true also enrolls everything that currently matches. Example: 3 emails to contacts of deals entering stage 'lead', stop if the deal leaves 'lead'.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string"},"channel":{"type":"string"},"connection":{"type":"string"},"trigger":{"type":"object"},"exit_when":{"type":"array"},"steps":{"type":"array"},"enroll_existing":{"type":"boolean"},"enabled":{"type":"boolean"}},"required":["name","steps"]}},{"name":"relm_create_template","description":"Create a reusable email template. name, html (full HTML, {{field}} placeholders ok), optional subject + text (plaintext alt; auto-derived if omitted). Reference it from a rule/sequence step via {\"type\":\"send_email\",\"template\":\"<key or tmpl_id>\"}.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string"},"key":{"type":"string"},"subject":{"type":"string"},"html":{"type":"string"},"text":{"type":"string"}},"required":["name","html"]}},{"name":"relm_create_type","description":"Register a new object type in the schema (registry). Idempotent on key; returns the full type set.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"}},"required":["key"]}},{"name":"relm_create_webhook","description":"Subscribe an https endpoint to CRM events. events=['*'] for all, or a subset of ['contact.created','contact.updated','deal.created','deal.updated','deal.stage_changed']. Returns a `secret` ONCE - the subscriber verifies the `Relm-Signature` header (t=<unix>,v1=<hmac-sha256 of \"t.body\">). Deliveries retry with backoff and dead-letter after 6 attempts.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string"},"events":{"type":"array"},"description":{"type":"string"},"enabled":{"type":"boolean"}},"required":["url"]}},{"name":"relm_delete","description":"Soft-delete a record (recoverable via relm_restore). Never hard-destroys data.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"object":{"type":"string","enum":["contact","company","deal","activity"],"description":"Which core object."},"id":{"type":"string"}},"required":["object","id"]}},{"name":"relm_delete_connection","description":"Delete a connected messaging channel by id (e.g. to remove a rotated/wrong Resend key).","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},{"name":"relm_delete_webhook","description":"Delete a webhook subscription by id.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},{"name":"relm_describe_schema","description":"Return the live schema: every object, its fields (built-in + custom), and all enum groups with their current values (contact types, activity types, etc). ALWAYS call this before guessing a type, stage, or field - it is the source of truth for what exists.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"relm_enroll","description":"Manually enroll a contact into a sequence (idempotent per contact+sequence). Optional source={object,id} records what drove the enrollment (e.g. a deal).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"sequence_id":{"type":"string"},"contact_id":{"type":"string"},"source":{"type":"object","properties":{"object":{"type":"string"},"id":{"type":"string"}}}},"required":["sequence_id","contact_id"]}},{"name":"relm_get","description":"Fetch one record by id.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"object":{"type":"string","enum":["contact","company","deal","activity"],"description":"Which core object."},"id":{"type":"string"}},"required":["object","id"]}},{"name":"relm_get_automation","description":"Read one automation by id, with its trigger, conditions and actions.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},{"name":"relm_get_pipeline","description":"Read one pipeline by key or pl_ id, with its ordered stages and their semantic types (open/won/lost).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"pipeline":{"type":"string"}},"required":["pipeline"]}},{"name":"relm_get_sequence","description":"Read one drip sequence by id. view=sequence (default) returns it with its steps; view=enrollments lists who is enrolled and their state.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string"},"view":{"type":"string","enum":["sequence","enrollments"]}},"required":["id"]}},{"name":"relm_get_usage","description":"Read this workspace's current billing period: requests used, plan, monthly limit, and any metered overage. Call this to see how close you are to the quota before a big import.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"relm_get_webhook","description":"Read one webhook by id. view=webhook (default) returns the subscription; view=deliveries returns recent delivery attempts (status, retries, dead-letter) to debug why an endpoint isn't receiving events.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string"},"view":{"type":"string","enum":["webhook","deliveries"]}},"required":["id"]}},{"name":"relm_list","description":"List records of an object with keyset pagination. Optional filters vary by object (e.g. contact: email/company_id/type; deal: pipeline/stage/company_id; activity: contact_id/deal_id/type).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"object":{"type":"string","enum":["contact","company","deal","activity"],"description":"Which core object."},"limit":{"type":"number"},"cursor":{"type":"string"},"filter":{"type":"object","description":"object-specific filters"}},"required":["object"]}},{"name":"relm_list_automations","description":"List reactive rules (automations).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"relm_list_connections","description":"List connected messaging channels (never returns the secret key).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"relm_list_pipelines","description":"List pipelines with their ordered stages.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"relm_list_sequences","description":"List drip sequences with their steps and enrollment counts.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"relm_list_templates","description":"List reusable email templates.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"relm_list_webhooks","description":"List webhook subscriptions in this workspace/mode.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"relm_log_activity","description":"Log an activity (note/call/email/meeting/task) on a contact and/or deal. Convenience wrapper over create activity.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"type":{"type":"string"},"body":{"type":"string"},"contact_id":{"type":"string"},"deal_id":{"type":"string"}}}},{"name":"relm_manage_automation","description":"Change an existing automation by id. action=disable stops it firing (use this to turn off a misbehaving rule); action=enable resumes it; action=delete removes it. To read one, use relm_get_automation. To change a rule's trigger/conditions/actions, delete and recreate.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string"},"action":{"type":"string","enum":["enable","disable","delete"]}},"required":["id","action"]}},{"name":"relm_manage_pipeline","description":"Change an existing pipeline by key or pl_ id. action=rename changes its display `name` and/or its key (pass `new_key`) - deals link by internal id, so they follow a re-key automatically; action=set_default makes it the workspace default; action=delete removes it (fails if deals still use it - move them first). To read one, use relm_get_pipeline.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"pipeline":{"type":"string"},"action":{"type":"string","enum":["rename","set_default","delete"]},"name":{"type":"string","description":"New display name"},"new_key":{"type":"string","description":"New pipeline key (slugified); deals follow automatically"}},"required":["pipeline","action"]}},{"name":"relm_manage_sequence","description":"Change an existing drip sequence by id. action=disable stops further sends (use this to halt a bad sequence); action=enable resumes; action=delete removes it. To read one or list its enrollments, use relm_get_sequence.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string"},"action":{"type":"string","enum":["enable","disable","delete"]}},"required":["id","action"]}},{"name":"relm_manage_stage","description":"Add, rename/retype, delete, or reorder stages in a pipeline. action=add: `key` (+optional label, ordinal, type). action=rename: `key` (existing) + any of new_key / label / type - keys are slugified and deals follow automatically (fixes a typo'd key). action=delete: `key` (a stage in use by deals cannot be deleted). action=reorder: `order` = every existing stage key exactly once, in the new order. `type` is the semantic stage type: open | won | lost - so 'is this deal won?' is a flag (stage_type on every deal), not per-pipeline string matching.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"pipeline":{"type":"string"},"action":{"type":"string","enum":["add","rename","delete","reorder"]},"key":{"type":"string"},"new_key":{"type":"string"},"label":{"type":"string"},"type":{"type":"string","enum":["open","won","lost"]},"ordinal":{"type":"number"},"order":{"type":"array","items":{"type":"string"}}},"required":["pipeline","action"]}},{"name":"relm_manage_webhook","description":"Pause or resume delivery for an existing webhook by id. action=enable/disable. To read one or inspect its delivery attempts, use relm_get_webhook. To remove it, use relm_delete_webhook.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string"},"action":{"type":"string","enum":["enable","disable"]}},"required":["id","action"]}},{"name":"relm_preview_sequence","description":"Dry-run a sequence: how many contacts would enroll now + the send schedule. No side effects.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},{"name":"relm_restore","description":"Restore a soft-deleted record.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"object":{"type":"string","enum":["contact","company","deal","activity"],"description":"Which core object."},"id":{"type":"string"}},"required":["object","id"]}},{"name":"relm_search","description":"Cross-entity search over contacts, companies and deals by name/email/title.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string"},"limit":{"type":"number"}},"required":["query"]}},{"name":"relm_set_spend_cap","description":"Set (or clear) the hard monthly overage spend cap in USD. overage_cap_usd: a number caps paid overage (requests 429 with spend_cap_reached past it), 0 = never any overage, null = unlimited. This is the recovery for a spend_cap_reached error.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"overage_cap_usd":{"type":["number","null"]}},"required":["overage_cap_usd"]}},{"name":"relm_update","description":"Patch a record. Pass if_match (the record's current version) for optimistic concurrency; a 412 means re-fetch and retry.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"object":{"type":"string","enum":["contact","company","deal","activity"],"description":"Which core object."},"id":{"type":"string"},"patch":{"type":"object"},"if_match":{"type":"number"}},"required":["object","id","patch"]}}],"scan":{"score":56,"grade":"C","scanned_at":"2026-09-20T21:01:01.549Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T21:01:01.483Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":17,"max":20,"notes":["remote reachable in 2158ms"]},"poisoning":{"score":15,"max":15,"notes":["41 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 14 write-action tools with no auth"]},"maintenance":{"score":3,"max":15,"notes":["no repository listed"]},"identity":{"score":4,"max":10,"notes":["verified namespace with website, no repo"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"},{"id":"maint.no-repo","severity":"low","component":"maintenance","title":"No source repository listed"}],"inputs":{"probes":[{"url":"https://api.relmcrm.com/mcp","reachable":true,"authRequired":false,"latencyMs":2158,"serverInfo":{"name":"relm","version":"0.17.1"}}],"packages":[],"repo":{"found":false},"icon":{"url":"https://relmcrm.com/favicon.svg","source":"site"},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":8}}}},"grade_history":[],"reviews":[]}