Robly MCP by usefulapi

Find Robly contacts and lists; subscribe, update and move contacts between lists.

사용해야 할까요

품질 및 안전성

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

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

컨텍스트 비용

~3,177토큰 (도구 정의)
~1.6 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 2.48%)

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

설치

원클릭 설치

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

{
  "mcpServers": {
    "robly": {
      "url": "https://robly.usefulapi.io/mcp"
    }
  }
}

원격 엔드포인트

https://robly.usefulapi.io/mcpstreamable-http

할 수 있는 일

도구 목록

도구 (13)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢robly_list_contacts(status, list_id, updated_since, include_sub_lists, include_fields, ...)

List contacts (members) of the Robly account, newest first as Robly orders them: id, email, subscribed/deleted flags, subscription date, sign-up source, timestamps. Filter by status, by list, or by last-updated time; optionally include each contact's lists and data fields. Pages with limit (max 100) and offset: pass next_offset from the previous reply. Robly does not return a total. GET /api/v1/contacts/show.

입력 스키마

{
  "type": "object",
  "properties": {
    "status": {
      "description": "Only contacts with this status (default all).",
      "type": "string",
      "enum": [
        "all",
        "subscribed",
        "unsubscribed",
        "deleted"
      ]
    },
    "list_id": {
      "description": "Only contacts on this list (sub list id from robly_list_sub_lists).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "updated_since": {
      "description": "Only contacts changed since this ISO 8601 date-time with a timezone, e.g. 2026-10-01T00:00:00Z.",
      "type": "string"
    },
    "include_sub_lists": {
      "description": "Include the lists each contact is on.",
      "type": "boolean"
    },
    "include_fields": {
      "description": "Include each contact's data fields (name, custom fields).",
      "type": "boolean"
    },
    "limit": {
      "description": "Contacts per page, 1-100 (default 25).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "offset": {
      "description": "Contacts to skip (default 0).",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢robly_find_contact(member_id, email, include_sub_lists, include_fields)

Look up one contact by email address or member id: status, subscription date, sign-up source and, on request, the lists and data fields. Returns found: false when Robly has no such contact. GET /api/v1/contacts/search.

입력 스키마

{
  "type": "object",
  "properties": {
    "member_id": {
      "description": "Robly contact (member) id. Give this OR email.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "email": {
      "description": "The contact's email address. Give this OR member_id.",
      "type": "string",
      "minLength": 3,
      "maxLength": 254,
      "pattern": "^[^\\s@<>\",;:]+@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)+$"
    },
    "include_sub_lists": {
      "description": "Include the lists the contact is on.",
      "type": "boolean"
    },
    "include_fields": {
      "description": "Include the contact's data fields.",
      "type": "boolean"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢robly_check_list_membership(member_id, email, sub_list_id)

Whether one contact (by email or member id) is on one list. GET /api/v1/contacts/exists_in_sub_list.

입력 스키마

{
  "type": "object",
  "properties": {
    "member_id": {
      "description": "Robly contact (member) id. Give this OR email.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "email": {
      "description": "The contact's email address. Give this OR member_id.",
      "type": "string",
      "minLength": 3,
      "maxLength": 254,
      "pattern": "^[^\\s@<>\",;:]+@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)+$"
    },
    "sub_list_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Sub list id from robly_list_sub_lists."
    }
  },
  "required": [
    "sub_list_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢robly_list_sub_lists(include_all)

List the account's sub lists (the lists contacts belong to): id, name, position, timestamps. Public lists only unless include_all is true. Use the ids for list filters and for adding contacts. GET /api/v1/sub_lists/show.

입력 스키마

{
  "type": "object",
  "properties": {
    "include_all": {
      "description": "Also include non-public lists.",
      "type": "boolean"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢robly_list_fields(include_all)

List the contact data fields (First Name, Last Name, custom fields): id, label, type, required flag and the user_tag that robly_subscribe_contact and robly_update_contact use as the field key. GET /api/v1/fields/show.

입력 스키마

{
  "type": "object",
  "properties": {
    "include_all": {
      "description": "Also include fields hidden from public sign-up forms.",
      "type": "boolean"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢robly_get_signup_form(include_all)

The data fields and sub lists a new subscriber can be given through the sign-up API (public ones unless include_all is true). GET /api/v1/sign_up/show.

입력 스키마

{
  "type": "object",
  "properties": {
    "include_all": {
      "description": "Also include non-public fields and lists.",
      "type": "boolean"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴robly_subscribe_contact(email, fields, sub_list_ids, double_opt_in, welcome_email, ...)

WRITE: add a new subscribed contact (or re-submit an existing one through the sign-up form). With double_opt_in Robly EMAILS the contact a confirmation link first; with welcome_email it EMAILS the welcome message right away; with include_autoresponder it triggers matching autoresponders, which email the contact. Only subscribe people who agreed to receive email. Field values go in `fields`, keyed by the user_tag from robly_list_fields (for example fname, lname). POST /api/v1/sign_up/generate.

입력 스키마

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "minLength": 3,
      "maxLength": 254,
      "pattern": "^[^\\s@<>\",;:]+@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)+$",
      "description": "The new contact's email address."
    },
    "fields": {
      "description": "Data field values keyed by user_tag, e.g. {\"fname\": \"Ada\", \"lname\": \"Lovelace\"}.",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string",
        "maxLength": 1000
      }
    },
    "sub_list_ids": {
      "description": "Lists to put the contact on (ids from robly_list_sub_lists).",
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      }
    },
    "double_opt_in": {
      "description": "Send a confirmation email; the contact is subscribed only after clicking it, then gets the welcome email.",
      "type": "boolean"
    },
    "welcome_email": {
      "description": "Skip confirmation and send the welcome email now.",
      "type": "boolean"
    },
    "include_autoresponder": {
      "description": "Trigger matching autoresponders (they email the contact).",
      "type": "boolean"
    },
    "return_contact": {
      "description": "Return the created contact.",
      "type": "boolean"
    }
  },
  "required": [
    "email"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴robly_add_contact_to_list(member_id, email, sub_list_id, include_autoresponder)

WRITE: put an existing contact on a list. With include_autoresponder Robly triggers autoresponders matching the newly listed contact, which EMAIL the contact. POST /api/v1/contacts/add_sub_list.

입력 스키마

{
  "type": "object",
  "properties": {
    "member_id": {
      "description": "Robly contact (member) id. Give this OR email.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "email": {
      "description": "The contact's email address. Give this OR member_id.",
      "type": "string",
      "minLength": 3,
      "maxLength": 254,
      "pattern": "^[^\\s@<>\",;:]+@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)+$"
    },
    "sub_list_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Sub list id from robly_list_sub_lists."
    },
    "include_autoresponder": {
      "description": "Trigger matching autoresponders (they email the contact).",
      "type": "boolean"
    }
  },
  "required": [
    "sub_list_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴robly_remove_contact_from_list(member_id, email, sub_list_id)

WRITE: take a contact off one list (the contact itself is kept). POST /api/v1/contacts/remove_sub_list.

입력 스키마

{
  "type": "object",
  "properties": {
    "member_id": {
      "description": "Robly contact (member) id. Give this OR email.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "email": {
      "description": "The contact's email address. Give this OR member_id.",
      "type": "string",
      "minLength": 3,
      "maxLength": 254,
      "pattern": "^[^\\s@<>\",;:]+@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)+$"
    },
    "sub_list_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Sub list id from robly_list_sub_lists."
    }
  },
  "required": [
    "sub_list_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴robly_update_contact(member_id, fields, add_to_list_ids, remove_from_list_ids, remove_from_all_other_lists, ...)

WRITE: change an existing contact's data fields and/or list memberships in one call. Name the contact by member_id (look it up with robly_find_contact). `fields` are keyed by user_tag (robly_list_fields); the email address cannot be changed here. add_to_list_ids puts the contact on those lists, remove_from_list_ids takes it off them. remove_from_all_other_lists also removes the contact from every list NOT named in add_to_list_ids (requires add_to_list_ids). include_autoresponder triggers autoresponders that EMAIL the contact. POST /api/v1/contacts/update_full_contact.

입력 스키마

{
  "type": "object",
  "properties": {
    "member_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Robly contact (member) id."
    },
    "fields": {
      "description": "Data field values keyed by user_tag, e.g. {\"fname\": \"Ada\"}.",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string",
        "maxLength": 1000
      }
    },
    "add_to_list_ids": {
      "description": "Lists to put the contact on.",
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      }
    },
    "remove_from_list_ids": {
      "description": "Lists to take the contact off.",
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      }
    },
    "remove_from_all_other_lists": {
      "description": "Also remove the contact from every list not in add_to_list_ids.",
      "type": "boolean"
    },
    "include_autoresponder": {
      "description": "Trigger matching autoresponders (they email the contact).",
      "type": "boolean"
    }
  },
  "required": [
    "member_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴robly_unsubscribe_contact(member_id, email)

WRITE: unsubscribe a contact so Robly stops emailing it. Robly's API cannot undo this: an unsubscribed contact can only come back through a sign-up form. Use it for a contact that asked to stop. POST /api/v1/contacts/unsubscribe.

입력 스키마

{
  "type": "object",
  "properties": {
    "member_id": {
      "description": "Robly contact (member) id. Give this OR email.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "email": {
      "description": "The contact's email address. Give this OR member_id.",
      "type": "string",
      "minLength": 3,
      "maxLength": 254,
      "pattern": "^[^\\s@<>\",;:]+@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)+$"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴robly_create_sub_list(name)

WRITE: create a new, empty sub list. Robly does not say whether a list with the same name already exists, so check robly_list_sub_lists first. POST /api/v1/sub_lists/add_sub_list.

입력 스키마

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Name of the new list."
    }
  },
  "required": [
    "name"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴robly_rename_sub_list(sub_list_id, name)

WRITE: rename a sub list. POST /api/v1/sub_lists/rename_sub_list.

입력 스키마

{
  "type": "object",
  "properties": {
    "sub_list_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Sub list id from robly_list_sub_lists."
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The new name."
    }
  },
  "required": [
    "sub_list_id",
    "name"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

커뮤니티

이 서버 평가하기

증거

최근 관측

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