Qualia MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Qualia MCPList orders awaiting closing and group by status"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Qualia MCP
MCP server for the Qualia title and escrow platform -- talk to your orders, messages, and documents from Claude, Cursor, or any MCP client. First MCP in the title & escrow vertical.
What you can do with it
You: "List orders awaiting closing and group by status."
Claude: *calls list_orders, summarises by status*
You: "Send the buyer an update on the closing timeline for ORD-12345."
Claude: *calls send_message with subject + body, confirms the result*
You: "What documents are attached to order ORD-98765?"
Claude: *calls list_documents, returns the file list*Related MCP server: cursor-mcp-server
Why this exists
Qualia is the leading digital closing platform for the title & escrow industry. Their public Qualia API exposes a read-write GraphQL surface for placing orders, exchanging messages and documents, and pulling analytics -- but there was no MCP wrapper until now. Title & escrow shops run on tight margins and the manual data-entry tax is high; this MCP lets an AI agent drive Qualia the same way a human would.
Other title & escrow platforms (SoftPro, RamQuest, Resware) have no MCP
either. This one targets Qualia specifically because it has the largest
market share, a public GraphQL API, and a vendor partner program
(partners@qualia.com).
Install
pip install -e .Configure
export QUALIA_USERNAME="your-org-id"
export QUALIA_API_KEY="your-secret-key"Capability gates must be enabled on your organization for the tools you
need. Contact partners@qualia.com to request access. Write tools
(send_message) will fail with CAPABILITY_GATE_MISSING until the gate
is enabled.
Use with Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json
(macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"qualia": {
"command": "qualia_mcp",
"env": {
"QUALIA_USERNAME": "your-org-id",
"QUALIA_API_KEY": "your-secret-key"
}
}
}
}Use with Claude Code
claude mcp add qualia -- qualia_mcp \
--env QUALIA_USERNAME=your-org-id --env QUALIA_API_KEY=your-secret-keyTools
Tool | Type | Capability gate | What it does |
| Diagnostic | none | Verifies credentials + GraphQL connectivity |
| Read |
| Returns the authenticated org (id, name, displayName) |
| Read |
| Paginated title orders with optional status filter |
| Read |
| Single order detail (status, property address, timestamps) |
| Read |
| Messages on a title order (subject, body, author) |
| Write |
| Post a new message on a title order |
| Read |
| Documents attached to a title order |
Engineering notes
GraphQL + typed errors. Qualia returns 200 OK with an
errors[]array on GraphQL validation failures. We promote those to typed exceptions (QualiaAuthErrorforCAPABILITY_GATE_MISSING/UNAUTHENTICATED,QualiaNotFoundErrorforNOT_FOUND,QualiaRateLimitErrorforRATE_LIMITED, genericQualiaGraphQLErrorotherwise) so agents can branch on cause instead of message text.isError-compliance. Every tool raises on failure (instead of returning the error as a string). FastMCP's wire-level
isError=trueflag is only set when a tool raises, so the agent can distinguish failure from success.JSONL audit logging. Every tool call writes a structured record to stderr (or a file path via
QUALIA_AUDIT_LOG) for SOC2 auditability. Secret fields (api_key,password,token, etc.) are auto-redacted.Retry with backoff. Transient 5xx and 429 responses retry up to 3 times with exponential backoff + full jitter, honoring
Retry-After.
Development
pip install -e ".[dev]"
ruff check src tests
ruff format --check src tests
mypy src
pytestLicense
MIT.
See also
Available Tools
7 toolsget_orderA
Return a single title order by id (status, property address, timestamps).
Use when: "look up order ORD-12345" or "what's the status of this closing?". Args: order_id: the Qualia order id (e.g. "ord_abc123"). Requires: orders:read capability gate.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description does not disclose read-only nature, idempotency, side effects, or rate limits. While it mentions a capability gate, it lacks sufficient behavioral context for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: 3 lines plus args list, front-loaded purpose, no redundant information. Every sentence is necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a simple single-order retrieval with one parameter and output schema exists, the description fully covers usage, parameter details, and auth requirements. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates well by explaining the one parameter (order_id) with format and example ('Qualia order id e.g. ord_abc123'), adding meaning beyond the schema's title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Return a single title order by id' with specific fields (status, property address, timestamps), directly differentiating from siblings like list_orders for multiple orders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit example queries ('look up order ORD-12345', 'what's the status of this closing?') and mentions required capability gate, but does not explicitly state when not to use (e.g., for listing multiple orders use list_orders).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_organizationA
Return the authenticated Qualia organization (id, name, display name).
Use when: "what's my Qualia org id?" or "verify the org I'm authenticated as". Requires: organization:read capability gate.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. Discloses auth requirement and that it returns org info. Does not specify if data is cached or any side effects, but for a simple read operation this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each serving a purpose: what it returns, when to use, and requirements. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, description needn't detail return values. It mentions the return fields, and the capability gate suffices for context. Complete for a simple identification tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters in schema; description adds nothing about params. With 0 parameters, baseline is 4. No additional info needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it returns the authenticated Qualia organization with specific fields (id, name, display name). Differentiates from sibling tools like get_order and list_orders which handle different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit use cases ('what's my Qualia org id?') and the required capability gate ('organization:read'). Lacks mention of when not to use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkA
Verify credentials work. If this fails, all other tools will too.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states the tool verifies credentials, implying a read-only, non-destructive action. However, it does not describe what happens on success/failure (e.g., return format) or any additional behaviors like latency. Minimal but adequate for a health check.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no wasted words. The key purpose is front-loaded, and the warning provides essential context efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple health check with zero parameters and an existing output schema, the description is complete. It explains the tool's purpose and its critical relationship to other tools. No additional details are necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the schema coverage is 100% and there is nothing to add. The description does not need to provide parameter information, making it fully sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Verify credentials work,' which is a specific verb-verb and resource. It distinguishes itself from sibling tools (e.g., get_order, list_documents) by being a health check rather than a data retrieval or action tool. The warning that failure implies all other tools fail further clarifies its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly recommends using this tool first, as 'If this fails, all other tools will too' strongly implies a prerequisite check. It does not explicitly mention alternatives, but given the sibling tools are all operational, the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_documentsA
List documents attached to a title order (name, mime, size, created).
Use when: "what documents are on this order?" or "did the buyer upload the LOI yet?". Args: order_id: the Qualia order id. limit: page size (default 25, max 100). Requires: documents:read capability gate.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| order_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description adds the requirement of 'documents:read capability gate', indicating it's a read operation. However, it omits details like error handling, pagination behavior, or that the operation is non-destructive. The permission note is helpful, but more transparency on behavioral traits would improve the score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise: the main action is stated in the first sentence, followed by usage contexts, parameter details, and a permission requirement. Every sentence adds necessary information without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with 2 parameters and an existing output schema, the description covers the key aspects: purpose, fields returned, parameter meanings, usage scenarios, and permission. It doesn't address error cases or pagination beyond the limit parameter, but overall it is sufficiently complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates by explaining both parameters: order_id is 'the Qualia order id' and limit is 'page size (default 25, max 100)'. This adds significant meaning beyond the schema structure. However, it doesn't provide examples or format constraints beyond the default/max.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists documents attached to a title order, specifying the fields returned (name, mime, size, created). It uses a specific verb and resource, and no sibling tool has similar functionality, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides concrete usage scenarios (e.g., 'what documents are on this order?' or 'did the buyer upload the LOI yet?'), guiding when to use. It could improve by explicitly mentioning when not to use or contrasting with siblings, but the given context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_messagesA
List messages on a title order (most recent first).
Use when: "what's the latest message on this order?" or "show all messages from the buyer side". Args: order_id: the Qualia order id. limit: page size (default 25, max 100). Requires: messages:read capability gate.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| order_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions ordering ('most recent first'), pagination limits (default 25, max 100), and auth requirement ('messages:read capability gate'). However, it does not discuss behavior for invalid order IDs, rate limits, or complete response structure. The output schema exists but is not referenced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with purpose. Each sentence adds value, though the phrase 'on a title order' is unclear and slightly distracting. Overall, it is concise without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the two parameters and presence of an output schema, the description covers key aspects: purpose, ordering, auth, and parameter details. It could clarify whether 'buyer side' implies filtering, and what 'title order' means, but it is largely complete for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no descriptions (0% coverage), so the description must provide parameter meaning. It explains order_id as 'the Qualia order id' and limit as 'page size (default 25, max 100)', adding useful context beyond type and default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists messages on an order with most recent first, and provides example use cases. However, the phrase 'on a title order' is ambiguous and appears to be a typo, slightly reducing clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit use cases are given ('what's the latest message on this order?' or 'show all messages from the buyer side'), guiding appropriate invocation. It does not explicitly state when not to use or compare with siblings, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ordersA
List title orders for the authenticated organization.
Use when: "show me the last 10 orders" or "list orders awaiting closing". Args: limit: page size (default 25, max 100). offset: skip N orders for pagination. status: optional filter -- e.g. "OPEN", "CLOSED", "CANCELLED". Requires: orders:read capability gate.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| status | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses auth requirement ('orders:read capability gate'), pagination defaults, and status filter. While it doesn't explicitly state read-only, the verb 'list' and auth gate imply it. Lacks detail on ordering or empty results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise and well-structured: one-line purpose, usage examples, args list, requirement. Could be slightly more compact by integrating use-when into purpose, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers auth, pagination, filtering. Does not mention that return is a list of orders (implied) or ordering. With output schema present, return details are not needed. Sibling tools are noted indirectly. Reasonably complete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, so description fully compensates. Explains limit (page size, default 25, max 100), offset (skip N), and status (optional filter with examples). Adds significant meaning beyond schema types and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'List title orders for the authenticated organization' with a specific verb and resource. Differentiates from sibling tools like get_order (singular) and others.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete usage examples ('show me the last 10 orders', 'list orders awaiting closing'), giving clear context. Does not explicitly mention when not to use or contrast with get_order, but examples effectively guide the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageA
Post a message on a title order.
Use when: "send the buyer an update on the closing timeline" or "ask escrow to verify the wire instructions". Args: order_id: the Qualia order id. subject: short subject line (1-200 chars). body: message text (1-10000 chars). Plain text or basic markdown. Requires: messages:write capability gate.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| subject | Yes | ||
| order_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description says 'Post' (mutation) and mentions permission gate. Lacks details on delivery, side effects, or rate limits. Character constraints added.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise with clear sections. Examples are helpful but could be shortened. Well-structured with purpose, usage, args, and requirement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists but not detailed. Lacks error handling, confirmation, or effect on order status. Adequate for a simple send action but could mention response format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage. Description adds crucial info: order_id is Qualia ID, subject length 1-200 chars, body length 1-10000 chars with markdown support. Compensates well for missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Post a message on a title order' with specific examples. Distinguishes from list_messages which reads messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete use case examples ('send the buyer an update', 'ask escrow to verify'). Mentions capability gate requirement. No explicit when-not-to-use, but siblings imply reading vs. writing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.1.0- First observed
get_order - First observed
get_organization - First observed
health_check - First observed
list_documents - First observed
list_messages - First observed
list_orders - First observed
send_message
TDQS
Scored across 7 tools
Each tool has a clearly distinct purpose: order retrieval, organization info, health check, document listing, message listing, order listing, and message sending. No overlapping functionalities.
Most tools follow a verb_noun pattern (get_order, list_orders, send_message). 'health_check' is an exception but it's a common idiom. Overall consistent and predictable.
With 7 tools, the set is well-scoped for a title order management API. Each tool covers a necessary function without bloat or deficiency.
Covers essential read operations and message sending. Missing CRUD operations for orders (create, update) but the domain focus appears to be monitoring and communication, so minor gap.
Maintenance
Related MCP Connectors
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
MCP server giving Claude AI access to 22+ NYC public-record databases for real estate due diligence
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
Real-time chat for AI agents. Claude Code, Cursor, Cline and Codex join channels over MCP.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server that exposes PraisonAI AI agents and tools for use with Claude Desktop, Cursor, VS Code, Windsurf, and other MCP clients.1MIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server wrapping the Cursor CLI agent, enabling Claude Code and other MCP clients to delegate tasks to Cursor's AI agent for file writing, bash commands, and codebase queries.-
- AlicenseCqualityBmaintenanceMCP server to connect Claude Code, Codex, or Cursor to the Lightbulb Partners Agents platform, enabling domain agents, code workspaces, connectors, and more.500Apache 2.0
- AlicenseNot gradedqualityCmaintenanceMCP server for the FieldRoutes pest-control / lawn-care operations platform — talk to your data from Claude, Cursor, or any MCP client.MIT