Relm CRM

API-first CRM for LLMs - contacts, companies, deals and activities over a native MCP server.

사용해야 할까요

품질 및 안전성

B
설명 품질
95%
스키마 완전성
70%
이름 품질
80%
오염 위험
60%
권한 일치
80%
프로토콜 준수
100%

발견 사항 (7)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool 'relm_create' description contains placeholder textrelm_create에서
  • MEDIUMTool 'relm_create_template' description contains placeholder textrelm_create_template에서
  • LOWTool 'relm_list_webhooks' suggests web access but openWorldHint=falserelm_list_webhooks에서
  • LOWTool 'relm_get_webhook' suggests web access but openWorldHint=falserelm_get_webhook에서
  • INFOTool description contains placeholder or incomplete textrelm_create에서
  • INFOTool description contains placeholder or incomplete textrelm_create_template에서

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~4,967토큰 (도구 정의)
~442 B일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 3.88%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "relm": {
      "url": "https://api.relmcrm.com/mcp"
    }
  }
}

원격 엔드포인트

https://api.relmcrm.com/mcpstreamable-http

할 수 있는 일

도구 목록

도구 (41)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢relm_describe_schema

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.

입력 스키마

{
  "type": "object",
  "properties": {}
}
🟢relm_search(query, limit)

Cross-entity search over contacts, companies and deals by name/email/title.

입력 스키마

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    },
    "limit": {
      "type": "number"
    }
  },
  "required": [
    "query"
  ]
}
🟢relm_list(object, limit, cursor, filter)

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).

입력 스키마

{
  "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"
  ]
}
🟢relm_get(object, id)

Fetch one record by id.

입력 스키마

{
  "type": "object",
  "properties": {
    "object": {
      "type": "string",
      "enum": [
        "contact",
        "company",
        "deal",
        "activity"
      ],
      "description": "Which core object."
    },
    "id": {
      "type": "string"
    }
  },
  "required": [
    "object",
    "id"
  ]
}
🟡relm_create(object, data)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "object": {
      "type": "string",
      "enum": [
        "contact",
        "company",
        "deal",
        "activity"
      ],
      "description": "Which core object."
    },
    "data": {
      "type": "object"
    }
  },
  "required": [
    "object",
    "data"
  ]
}
🟡relm_update(object, id, patch, if_match)

Patch a record. Pass if_match (the record's current version) for optimistic concurrency; a 412 means re-fetch and retry.

입력 스키마

{
  "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"
  ]
}
🔴relm_delete(object, id)

Soft-delete a record (recoverable via relm_restore). Never hard-destroys data.

입력 스키마

{
  "type": "object",
  "properties": {
    "object": {
      "type": "string",
      "enum": [
        "contact",
        "company",
        "deal",
        "activity"
      ],
      "description": "Which core object."
    },
    "id": {
      "type": "string"
    }
  },
  "required": [
    "object",
    "id"
  ]
}
⚪relm_restore(object, id)

Restore a soft-deleted record.

입력 스키마

{
  "type": "object",
  "properties": {
    "object": {
      "type": "string",
      "enum": [
        "contact",
        "company",
        "deal",
        "activity"
      ],
      "description": "Which core object."
    },
    "id": {
      "type": "string"
    }
  },
  "required": [
    "object",
    "id"
  ]
}
🟡relm_log_activity(type, body, contact_id, deal_id)

Log an activity (note/call/email/meeting/task) on a contact and/or deal. Convenience wrapper over create activity.

입력 스키마

{
  "type": "object",
  "properties": {
    "type": {
      "type": "string"
    },
    "body": {
      "type": "string"
    },
    "contact_id": {
      "type": "string"
    },
    "deal_id": {
      "type": "string"
    }
  }
}
🟢relm_list_pipelines

List pipelines with their ordered stages.

입력 스키마

{
  "type": "object",
  "properties": {}
}
🟡relm_create_pipeline(key, name, is_default, stages)

Create a pipeline. Optionally provide stages [{key,label}] (defaults to lead/qualified/proposal/won/lost) and is_default.

입력 스키마

{
  "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"
            ]
          }
        }
      }
    }
  }
}
🔴relm_manage_stage(pipeline, action, key, new_key, label, ...)

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.

입력 스키마

{
  "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"
  ]
}
🟡relm_create_type(key, label)

Register a new object type in the schema (registry). Idempotent on key; returns the full type set.

입력 스키마

{
  "type": "object",
  "properties": {
    "key": {
      "type": "string"
    },
    "label": {
      "type": "string"
    }
  },
  "required": [
    "key"
  ]
}
🟡relm_create_field(object, key, label, data_type, enum_group, ...)

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.

입력 스키마

{
  "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"
  ]
}
🟡relm_create_enum_value(group, value, label)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "group": {
      "type": "string"
    },
    "value": {
      "type": "string"
    },
    "label": {
      "type": "string"
    }
  },
  "required": [
    "group",
    "value"
  ]
}
🔴relm_batch(operations)

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).

입력 스키마

{
  "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"
  ]
}
🟢relm_automations_capabilities

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.

입력 스키마

{
  "type": "object",
  "properties": {}
}
⚪relm_connect_channel(channel, provider, api_key, from, name)

Connect a BYO messaging channel so automations can send. channel='email', provider='resend', api_key=<your Resend key>, from='Team <[email protected]>' (must be a verified Resend sender). The key is encrypted at rest.

입력 스키마

{
  "type": "object",
  "properties": {
    "channel": {
      "type": "string"
    },
    "provider": {
      "type": "string"
    },
    "api_key": {
      "type": "string"
    },
    "from": {
      "type": "string"
    },
    "name": {
      "type": "string"
    }
  },
  "required": [
    "api_key"
  ]
}
🟢relm_list_connections

List connected messaging channels (never returns the secret key).

입력 스키마

{
  "type": "object",
  "properties": {}
}
🟡relm_create_automation(name, trigger_event, conditions, actions, enabled)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "trigger_event": {
      "type": "string"
    },
    "conditions": {
      "type": "array"
    },
    "actions": {
      "type": "array"
    },
    "enabled": {
      "type": "boolean"
    }
  },
  "required": [
    "name",
    "trigger_event",
    "actions"
  ]
}
🟢relm_list_automations

List reactive rules (automations).

입력 스키마

{
  "type": "object",
  "properties": {}
}
🟡relm_create_template(name, key, subject, html, text)

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>"}.

입력 스키마

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "key": {
      "type": "string"
    },
    "subject": {
      "type": "string"
    },
    "html": {
      "type": "string"
    },
    "text": {
      "type": "string"
    }
  },
  "required": [
    "name",
    "html"
  ]
}
🟢relm_list_templates

List reusable email templates.

입력 스키마

{
  "type": "object",
  "properties": {}
}
🟡relm_create_sequence(name, channel, connection, trigger, exit_when, ...)

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'.

입력 스키마

{
  "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"
  ]
}
🟢relm_list_sequences

List drip sequences with their steps and enrollment counts.

입력 스키마

{
  "type": "object",
  "properties": {}
}
🟢relm_preview_sequence(id)

Dry-run a sequence: how many contacts would enroll now + the send schedule. No side effects.

입력 스키마

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    }
  },
  "required": [
    "id"
  ]
}
⚪relm_enroll(sequence_id, contact_id, source)

Manually enroll a contact into a sequence (idempotent per contact+sequence). Optional source={object,id} records what drove the enrollment (e.g. a deal).

입력 스키마

{
  "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"
  ]
}
🟡relm_create_webhook(url, events, description, enabled)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string"
    },
    "events": {
      "type": "array"
    },
    "description": {
      "type": "string"
    },
    "enabled": {
      "type": "boolean"
    }
  },
  "required": [
    "url"
  ]
}
🟢relm_list_webhooks

List webhook subscriptions in this workspace/mode.

입력 스키마

{
  "type": "object",
  "properties": {}
}
🔴relm_delete_webhook(id)

Delete a webhook subscription by id.

입력 스키마

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    }
  },
  "required": [
    "id"
  ]
}
🟢relm_get_automation(id)

Read one automation by id, with its trigger, conditions and actions.

입력 스키마

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    }
  },
  "required": [
    "id"
  ]
}
🟢relm_get_sequence(id, view)

Read one drip sequence by id. view=sequence (default) returns it with its steps; view=enrollments lists who is enrolled and their state.

입력 스키마

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "view": {
      "type": "string",
      "enum": [
        "sequence",
        "enrollments"
      ]
    }
  },
  "required": [
    "id"
  ]
}
🟢relm_get_pipeline(pipeline)

Read one pipeline by key or pl_ id, with its ordered stages and their semantic types (open/won/lost).

입력 스키마

{
  "type": "object",
  "properties": {
    "pipeline": {
      "type": "string"
    }
  },
  "required": [
    "pipeline"
  ]
}
🟢relm_get_webhook(id, view)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "view": {
      "type": "string",
      "enum": [
        "webhook",
        "deliveries"
      ]
    }
  },
  "required": [
    "id"
  ]
}
🔴relm_manage_automation(id, action)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "action": {
      "type": "string",
      "enum": [
        "enable",
        "disable",
        "delete"
      ]
    }
  },
  "required": [
    "id",
    "action"
  ]
}
🔴relm_manage_sequence(id, action)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "action": {
      "type": "string",
      "enum": [
        "enable",
        "disable",
        "delete"
      ]
    }
  },
  "required": [
    "id",
    "action"
  ]
}
🔴relm_manage_pipeline(pipeline, action, name, new_key)

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.

입력 스키마

{
  "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"
  ]
}
🔴relm_manage_webhook(id, action)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "action": {
      "type": "string",
      "enum": [
        "enable",
        "disable"
      ]
    }
  },
  "required": [
    "id",
    "action"
  ]
}
🔴relm_delete_connection(id)

Delete a connected messaging channel by id (e.g. to remove a rotated/wrong Resend key).

입력 스키마

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    }
  },
  "required": [
    "id"
  ]
}
🟢relm_get_usage

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.

입력 스키마

{
  "type": "object",
  "properties": {}
}
🟡relm_set_spend_cap(overage_cap_usd)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "overage_cap_usd": {
      "type": [
        "number",
        "null"
      ]
    }
  },
  "required": [
    "overage_cap_usd"
  ]
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 41개
검증됨버전이 기록되지 않음도구 41개