Open To Close MCP by usefulapi
Review Open To Close properties and transaction records; add contacts and property notes.
Should I use this
Quality & Safety
Findings (8)
- LOWin opentoclose_list_property_fields
- LOWin opentoclose_list_property_field_groups
- LOWin opentoclose_list_property_field_sections
- LOWin opentoclose_list_property_templates
- LOWin opentoclose_list_property_contacts
- LOWin opentoclose_list_property_documents
- LOWin opentoclose_list_property_notes
- LOWin opentoclose_list_property_tasks
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"open-to-close": {
"url": "https://open-to-close.usefulapi.io/mcp"
}
}
}Remote endpoints
https://open-to-close.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (20)
🟢opentoclose_list_agents(offset, limit, first_name, last_name, email, ...)
List agents with name/email search and documented sorting. One offset/limit page. GET /v1/agents/.
Input Schema
{
"type": "object",
"properties": {
"offset": {
"description": "Rows to skip, default 0.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"limit": {
"description": "Rows per call, default 20, maximum 100. If the page is full, request the next offset; no total count is documented.",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"first_name": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"last_name": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"email": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"sort_by": {
"type": "string",
"enum": [
"first_name",
"last_name",
"email"
]
},
"sort_dir": {
"type": "string",
"enum": [
"asc",
"desc"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢opentoclose_list_contacts(offset, limit, first_name, last_name, email, ...)
List contacts with name/email search and documented sorting. One offset/limit page. GET /v1/contacts.
Input Schema
{
"type": "object",
"properties": {
"offset": {
"description": "Rows to skip, default 0.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"limit": {
"description": "Rows per call, default 20, maximum 100. If the page is full, request the next offset; no total count is documented.",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"first_name": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"last_name": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"email": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"sort_by": {
"type": "string",
"enum": [
"first_name",
"last_name",
"email"
]
},
"sort_dir": {
"type": "string",
"enum": [
"asc",
"desc"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢opentoclose_list_contact_roles
List contact roles. GET /v1/contactRoles/.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢opentoclose_list_file_roles
List file roles. GET /v1/fileRoles/.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢opentoclose_list_property_fields
List property fields grouped into sections. GET /v1/propertyFields.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢opentoclose_list_property_field_groups
List property field groups. GET /v1/propertyFieldGroups.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢opentoclose_list_property_field_sections
List property field sections. GET /v1/propertyFieldSections.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢opentoclose_list_property_templates
List property templates. GET /v1/propertyTemplates/.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢opentoclose_list_teams
List teams and their members. GET /v1/teams/.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢opentoclose_list_time_zones
List time zones. GET /v1/timeZones/.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢opentoclose_list_tags
List tags. GET /v1/tags.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢opentoclose_list_properties(offset, limit)
List properties with team/agent summaries through the current v1.1 endpoint. Maximum 50 per call. This does not return a property's full field values. GET /v1.1/properties.
Input Schema
{
"type": "object",
"properties": {
"offset": {
"description": "Rows to skip, default 0.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"limit": {
"description": "Rows per call, default 20, maximum 50. If the page is full, request the next offset; no total count is documented.",
"type": "integer",
"minimum": 1,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢opentoclose_list_property_contacts(property_id, first_name, last_name, email)
List contacts associated with a property, optionally filtered by name/email. GET /v1/properties/{property_id}/contacts.
Input Schema
{
"type": "object",
"properties": {
"property_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"first_name": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"last_name": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"email": {
"type": "string",
"minLength": 1,
"maxLength": 500
}
},
"required": [
"property_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢opentoclose_list_property_documents(property_id)
Read a property's document folders and document metadata/links. Does not download files. GET /v1/properties/{property_id}/documents.
Input Schema
{
"type": "object",
"properties": {
"property_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"property_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢opentoclose_list_property_notes(property_id, offset, limit)
List notes associated with a property. One offset/limit page. GET /v1/properties/{property_id}/notes.
Input Schema
{
"type": "object",
"properties": {
"property_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"offset": {
"description": "Rows to skip, default 0.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"limit": {
"description": "Rows per call, default 20, maximum 100. If the page is full, request the next offset; no total count is documented.",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"required": [
"property_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢opentoclose_get_property_note(property_id, record_id)
Read one note associated with a property. GET /v1/properties/{property_id}/notes/{record_id}.
Input Schema
{
"type": "object",
"properties": {
"property_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"record_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"property_id",
"record_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢opentoclose_list_property_tasks(property_id)
List tasks associated with a property. GET /v1/properties/{property_id}/tasks.
Input Schema
{
"type": "object",
"properties": {
"property_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"property_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢opentoclose_get_property_task(property_id, record_id)
Read one task associated with a property. GET /v1/properties/{property_id}/tasks/{record_id}.
Input Schema
{
"type": "object",
"properties": {
"property_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"record_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"property_id",
"record_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡opentoclose_create_contact(first_name, last_name, email, middle_name, nick_name, ...)
WRITE: create a contact. Search existing contacts first to avoid duplicates, then confirm the requested details. Creates a contact record without associating it with a property. Returns a created record ID. POST /v1/contacts.
Input Schema
{
"type": "object",
"properties": {
"first_name": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"last_name": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"email": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"middle_name": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"nick_name": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"office_email": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"phone": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"cell_phone": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"address": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"city": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"state": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"zip": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"country": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"contact_role_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡opentoclose_add_property_note(property_id, description, private, pinned, personal, ...)
WRITE: add a note to a property. Confirm the property and note content/visibility with the user first. Adds another note on each call; inspect current notes before retrying. Optional visibility fields are omitted unless supplied; the vendor documents null defaults. POST /v1/properties/{property_id}/notes.
Input Schema
{
"type": "object",
"properties": {
"property_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"description": {
"type": "string",
"minLength": 1,
"maxLength": 10000
},
"private": {
"type": "boolean"
},
"pinned": {
"type": "boolean"
},
"personal": {
"type": "boolean"
},
"global": {
"type": "boolean"
},
"priority": {
"type": "string",
"enum": [
"low",
"medium",
"high"
]
},
"priority_date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
}
},
"required": [
"property_id",
"description"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence