ezyVet MCP
Click on "Install 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., "@ezyVet MCPShow upcoming appointments for dog Rex."
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.
ezyVet MCP
Model Context Protocol (MCP) server for ezyVet — cloud-based veterinary practice management software.
Talk to ezyVet from Claude, Cursor, or any MCP client. Read animals (patients), contacts (owners), appointments, consults, invoices. Create new records. Tokens are OAuth2 client-credentials with 12-hour TTL, auto-refreshed.
Built against the ezyVet REST API. No existing MCP for ezyVet — this is the first.
What you can do with it
You: "Find dog 'Rex' for owner Sarah Johnson and show upcoming appointments."
Claude: *find_contacts + find_animals + find_appointments → summary*
You: "Book a vaccination appointment for animal 4523 next Tuesday at 10am."
Claude: *list_appointment_types, then create_appointment with right type_id*
You: "Open a new consult for the cat we just saw — note the diagnosis."
Claude: *create_consult with animal_id, vet_id, notes*
You: "What invoices does contact 892 have from this month?"
Claude: *find_invoices with contact_id + date range*Related MCP server: xero-mcp-enhanced
Install
pip install -e .Configure
Register as an ezyVet integration partner to get your credentials.
export EZYVET_PARTNER_ID="..."
export EZYVET_CLIENT_ID="..."
export EZYVET_CLIENT_SECRET="..."
export EZYVET_SITE_UID="..."
export EZYVET_SCOPE="read-animal read-contact read-appointment read-consult read-invoice read-user"Use with Claude Desktop
{
"mcpServers": {
"ezyvet_mcp": {
"command": "ezyvet_mcp",
"env": {
"EZYVET_PARTNER_ID": "...",
"EZYVET_CLIENT_ID": "...",
"EZYVET_CLIENT_SECRET": "...",
"EZYVET_SITE_UID": "...",
"EZYVET_SCOPE": "..."
}
}
}
}Tools
Tool | Type | What it does |
| Diagnostic | Mints a token + lists users |
| Read | Single animal (patient) |
| Read | Search animals |
| Write | New patient |
| Write | Patch patient fields |
| Read | Single contact (owner) |
| Read | Search owners |
| Write | New owner |
| Read | List appointments |
| Write | Book appointment |
| Read | List visits |
| Write | Open visit |
| Read | List invoices |
| Read | Reference: species |
| Read | Reference: breeds |
| Read | Reference: appointment types |
| Read | Reference: practice staff |
API coverage
Maps MCP tools to ezyVet's 216-endpoint REST API. Full docs: https://developers.ezyvet.com/
Rate limits
ezyVet throttles most endpoints at 60 req/min and globally at 180 req/min per database. The client auto-retries 401s (token refresh) but doesn't retry 429s — slow down on your end if you hit them.
Development
pip install -e ".[dev]"
pytest
ezyvet_mcpNeed a custom MCP for your SaaS?
I build production-grade MCP servers for vertical SaaS — insurance, dental, veterinary, legal, property mgmt, home services. Typical engagement: 2-4 weeks, $25K-$120K. Source-owned, MIT-licensed, no vendor lock-in.
See sanjibani/mcp-services or email sanjibani@users.noreply.github.com.
Ships in the sanjibani vertical-MCP portfolio — see also hawksoft-mcp, open-dental-mcp, ezyvet-mcp, jobber-mcp, paid-skills, mcp-vertical-template.
MIT.
Acknowledgements
ezyVet for the public REST API + OAuth flow
Built using mcp-vertical-template
Inspired by sanjibani/hawksoft-mcp and sanjibani/open-dental-mcp (same template pattern)
See also
Available Tools
17 toolscreate_animalB
Create a new animal (patient). animal_json is a JSON object string
matching ezyVet's animal schema (at minimum: name, species_id).
| Name | Required | Description | Default |
|---|---|---|---|
| animal_json | 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. The description states it creates, implying mutation, but does not disclose any behavioral traits such as required permissions, idempotency, or what happens on duplicate. The output schema exists but return behavior is not described.
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 sentences with no wasted words. The first sentence states the purpose, the second explains the parameter. Well front-loaded and 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?
The description covers the parameter and basic purpose, but lacks information on return values (despite an output schema existing) and error handling. For a create tool, the absence of behavioral context leaves 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?
Schema description coverage is 0%, but the description explains 'animal_json' is a JSON object string matching ezyVet's animal schema with minimum fields 'name' and 'species_id'. This adds meaningful semantics beyond the schema's type and 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?
The description clearly states it creates a new animal (patient) using a JSON string. The verb 'Create' and resource 'animal' are specific. It doesn't contrast with siblings like 'update_animal', but the purpose is 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?
No guidance on when to use this tool versus alternatives (e.g., 'update_animal' for modifications). No exclusions or prerequisites mentioned. The agent must infer context from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_appointmentC
Book a new appointment. appointment_json is a JSON object string.
| Name | Required | Description | Default |
|---|---|---|---|
| appointment_json | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description only says 'Book a new appointment', which implies mutation but lacks details on error handling, validation, or side effects.
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 but under-specified; it could be improved by adding structure details without being overly verbose.
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?
Despite having an output schema, the description lacks context about returned values, error handling, or relationship to sibling tools for a one-param but complex JSON input.
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% and the description only says 'appointment_json is a JSON object string' without explaining its structure or required fields.
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 books a new appointment, but does not differentiate from sibling create tools like create_consult or create_contact.
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?
No guidance on when to use this tool vs alternatives, no prerequisites or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_consultC
Open a new clinical consult (visit record).
| Name | Required | Description | Default |
|---|---|---|---|
| consult_json | 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 must disclose behavioral traits. It states 'open a new clinical consult', implying creation, but does not clarify side effects, required permissions, data persistence, or what exactly 'open' entails. The description is too sparse to provide adequate transparency.
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 very short (7 words), making it concise. However, it sacrifices necessary detail, crossing the line from concise to insufficient. It earns a 4 because it is efficient but lacks completeness.
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 has an output schema (undisclosed), a description should indicate what is returned. The description only tells the action, not the result. Additionally, no context about post-creation steps or interactions with sibling tools is provided, leaving the agent underinformed.
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 singular parameter 'consult_json' is a string with no schema description (0% coverage). The description adds zero explanation about its expected format, structure, or content. The agent is left guessing what JSON fields are required or acceptable.
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 uses 'Open a new clinical consult (visit record)', which clearly identifies the verb and resource. It distinguishes from siblings like 'create_animal' by specifying 'clinical consult'. However, 'open' is slightly less direct than 'create', and the purpose is clear but not exceptional.
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?
No guidance is provided on when to use this tool versus alternatives such as 'find_consults' for reading or 'update_animal' for modifications. There is no mention of prerequisites, context, or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_contactC
Create a new contact (owner). contact_json is a JSON object string.
| Name | Required | Description | Default |
|---|---|---|---|
| contact_json | 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 must bear the full burden of behavioral disclosure. It states 'Create a new contact,' implying a write operation, but fails to specify any side effects, required permissions, idempotency, or what happens on success (e.g., returns the created contact). The word 'owner' adds minimal behavioral context.
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 a single sentence, but it lacks essential details, making it under-specified rather than concise. It could be expanded to include parameter structure or usage notes.
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 that there is an output schema (though not visible here), the description should at least hint at what is returned. It does not cover error scenarios or the format of the JSON string. For the complexity of the parameter, the description is incomplete.
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 0% description coverage, meaning the parameter 'contact_json' has no documentation. The description says 'contact_json is a JSON object string,' but does not specify the expected structure, required fields, or example format. This is a critical gap for a complex string parameter.
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 'Create a new contact (owner).' This specifies the action (create) and the resource (contact), and adds context about it being an owner. The name 'create_contact' itself clarifies the purpose, though it does not distinguish from sibling tools beyond the resource type.
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?
No guidance is provided on when to use this tool versus alternatives like create_animal or create_appointment. There is no mention of prerequisites, such as requiring an existing user or authentication, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_animalsB
Search animals by name / species / breed. Returns the standard
{meta, items, messages} envelope from ezyVet.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| page | No | ||
| limit | No | ||
| breed_id | No | ||
| species_id | No |
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 behavior. It mentions the return envelope but does not state that the operation is read-only, whether it requires special permissions, or any side effects. For a search tool, this is minimal transparency.
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: the first states the purpose with specific criteria, the second describes the return format. No unnecessary words or redundancy.
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 presence of an output schema, the description is not required to detail return values. However, it covers only 3 of 5 parameters, omitting pagination details and any search behavior specifics (e.g., case sensitivity, partial matching). Completeness is adequate but has clear 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?
The description adds meaning by listing searchable attributes (name, species, breed) which correspond to parameters 'name', 'species_id', 'breed_id'. However, it does not explain pagination parameters ('page', 'limit') and the terms 'species' and 'breed' are ambiguous (text vs. ID). With 0% schema coverage, the description partially compensates but not fully.
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 verb 'search' and the resource 'animals', and specifies searchable attributes (name, species, breed). However, it does not explicitly differentiate from sibling tools like 'get_animal' or 'find_appointments', making it slightly less clear for exact purpose boundaries.
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 implies usage context through the search criteria, but lacks explicit guidance on when to use this tool versus alternatives. No 'when not to use' or alternative tool references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_appointmentsB
List appointments. Use start_date + end_date for a date range,
animal_id for a specific patient's visits.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| end_date | No | ||
| animal_id | No | ||
| start_date | No | ||
| appointment_type_id | No |
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 carries the full burden for behavioral disclosure. It only says 'List appointments', which is a read operation, but does not mention side effects, auth requirements, or any other behavioral traits. Minimal disclosure.
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 concise with no wasted words, but it only covers three of the six parameters. It could be more structured to list all parameters concisely.
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 has 6 parameters and no annotations, the description is incomplete. It does not cover all parameters, and there is no context on pagination (page, limit) or other filters like appointment_type_id. The output schema exists, but the description still lacks sufficient completeness.
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 must explain parameters. It explains start_date, end_date, and animal_id, but omits page, limit, and appointment_type_id. It adds some value but not complete.
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 states 'List appointments', which is a clear verb+resource combination. However, it does not differentiate from sibling tools like find_consults or find_invoices, so it gets a 4.
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 hints at usage by mentioning start_date+end_date for date range and animal_id for specific patient, but it lacks explicit when-to-use or alternatives compared to siblings. The guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_consultsC
List clinical consults (visits).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| end_date | No | ||
| animal_id | No | ||
| start_date | 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 the description must disclose behavior. It only states 'List clinical consults' without mentioning pagination, filtering, date semantics, or that it's a read-only operation. The description is insufficient for behavioral understanding.
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 extremely short, but this is under-specification rather than conciseness. It lacks front-loaded critical information, and every sentence is not earning its place because it provides no value beyond the name.
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 has 5 parameters, an output schema exists, and no annotations, the description is severely incomplete. It fails to mention return structure, pagination behavior, or parameter requirements, leaving the agent with insufficient context.
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%, and the tool description adds no parameter explanations. The agent must infer 5 parameters (page, limit, start_date, end_date, animal_id) solely from names, which is inadequate for correct invocation.
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 'List clinical consults (visits)' which is a clear verb+resource. It distinguishes from sibling tools like find_appointments and find_animals, though the term 'consults' could be slightly ambiguous without context.
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?
No guidance on when to use this tool versus alternatives. With siblings like find_appointments, find_animals, and create_consult, the description offers no context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_contactsC
Search contacts by name or email.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| No | |||
| limit | No | ||
| last_name | No | ||
| first_name | 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. It only states 'search' without disclosing pagination (page, limit parameters), default behavior (returns all contacts up to limit?), or sorting. Minimal transparency for a search 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?
Single sentence, front-loaded with key action and resource. No wasted words. Could include more detail (e.g., optional filters) without becoming verbose, but current conciseness is appropriate.
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, so return values are covered. However, description lacks context on pagination, filtering behavior (e.g., does it support partial matching?), and what happens with no parameters. Incomplete for a search tool with multiple optional filters.
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; 5 params, 0 required. Description mentions 'name or email', providing some context for first_name, last_name, and email. However, it ignores page and limit parameters, which could affect search results. Adds value but leaves gaps.
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 searches contacts by name or email. It distinguishes from siblings like 'get_contact' (which likely retrieves by ID) and other 'find_*' tools. However, it could be more precise by mentioning first_name and last_name separately.
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?
No guidance on when to use this tool versus alternatives. There is no mention of prerequisites or scenarios where other tools (e.g., get_contact) would be more appropriate. Implies usage but lacks explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_invoicesC
List invoices, optionally filtered by contact and date range.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| end_date | No | ||
| contact_id | No | ||
| start_date | No |
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 cover behavioral traits. It only says 'list' implying a read operation, but lacks details on pagination behavior, whether it returns all invoices or just a page, or any rate limits. The description is insufficient.
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 a single short sentence, which is concise but lacks structure. It front-loads the purpose but omits necessary details. Could be expanded to include more info without being overly verbose.
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?
Despite having an output schema, the description does not mention what fields are returned or pagination. With 5 parameters and no schema descriptions, the description is too sparse for an agent to use effectively.
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 description mentions 'contact' and 'date range' filters, which map to contact_id, start_date, end_date. However, it does not explain page, limit, or the format of date strings. Schema coverage is 0%, so the description should compensate but only partially does.
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 it lists invoices with optional filtering by contact and date range. The verb 'list' and resource 'invoices' are explicit. While it doesn't explicitly distinguish from sibling find_* tools, the context of invoices vs. animals/appointments/etc. makes it clear.
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?
No guidance on when to use this tool versus others. No mention of alternatives, prerequisites, or typical use cases. The description is too minimal to help an agent decide when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_animalA
Fetch a single animal (patient) by ezyVet ID.
| Name | Required | Description | Default |
|---|---|---|---|
| animal_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 carries full burden for behavioral disclosure, but it only says 'Fetch a single animal', omitting read-only nature, authorization, error handling, or return structure. The output schema presumably provides return info, but behavioral traits remain opaque.
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 a single front-loaded sentence with no unnecessary words. Every word earns its place.
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 simplicity of the tool (1 param, output schema exists), the description is adequate for basic invocation but lacks cues on alternative usage or disambiguation from sibling tools. It could mention that it returns a single record by primary key.
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 coverage is 0%, so the description must compensate. It clarifies that 'animal_id' is specifically an 'ezyVet ID', adding meaningful context beyond the schema's generic 'Animal Id'.
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 verb 'Fetch', the resource 'animal (patient)', and the method 'by ezyVet ID'. It unambiguously distinguishes this from siblings like 'find_animals' and 'create_animal'.
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?
No guidance on when to use this tool versus alternatives. It does not mention that this requires an existing animal ID or that it returns a single object, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contactC
Fetch a contact (the pet owner) by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| contact_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 carries full burden. It only states the basic operation without revealing error handling, return values (though output schema exists), or authorization needs. Minimal behavioral disclosure.
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 a single, clear sentence with no wasted words. However, it is very brief and could benefit from additional context without being verbose.
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's simplicity and the presence of an output schema, the description covers the core purpose. However, it lacks any mention of prerequisites (e.g., contact must exist) or edge cases, leaving some 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?
Schema description coverage is 0%, requiring the description to compensate. The description adds no extra meaning to the single parameter 'contact_id' beyond its name, which is already self-explanatory but still lacking necessary details like format or constraints.
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 action 'Fetch' and the resource 'a contact (the pet owner)' with the specific method 'by ID'. This distinguishes it from sibling tools like 'find_contacts' and 'create_contact'.
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?
No guidance is provided on when to use this tool versus alternatives such as 'find_contacts' for searching without an ID. The description assumes the user already knows to use it when they have a contact ID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkB
Verify credentials by minting an OAuth token and listing users.
| 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?
Without annotations, the description must disclose behavioral traits. It mentions token minting and user listing but omits side effects (e.g., token validity, rate limits) and idempotency. The term 'minting' may imply side effects, not clarified.
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 a single, clear sentence with no redundancy. It is appropriately sized for a simple health check operation.
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?
The description does not explain the return value or expected output format, despite an output schema being present. It also fails to provide usage context among 17 sibling tools, leaving the agent unclear about when to call this 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?
The tool has no parameters, and schema coverage is 100% vacuously. The description adds no parameter info, but this is acceptable as there are no parameters to document.
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's purpose: verifying credentials by minting an OAuth token and listing users. It uniquely identifies the tool among siblings as a health check operation.
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?
No guidance is provided on when to use this tool vs alternatives, such as error conditions or prerequisites like authentication state. It lacks explicit context for invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_appointment_typesA
List appointment type definitions (consult, vaccination, surgery, etc.).
| 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 bears full responsibility for behavioral disclosure. It states the tool lists definitions, which implies a read operation, but does not mention if the list is exhaustive, sorted, or requires authentication. The existence of an output schema partially compensates, but the description lacks explicit transparency beyond the basic action.
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 a single sentence of seven words, front-loaded with the key verb 'list' and the resource 'appointment type definitions'. Every word earns its place without any fluff or repetition.
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 has no parameters and an output schema exists, the description is reasonably complete. It could be improved by noting if the list is limited to active types or if it reflects the entire catalog, but the core purpose is fully conveyed.
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 input schema has no parameters, so the baseline is 4. The description adds meaning by specifying what the tool returns (appointment type definitions with examples), which is entirely beyond the empty schema.
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 appointment type definitions with specific examples (consult, vaccination, surgery), making the purpose immediately obvious. It distinctively separates this tool from sibling list tools (list_breeds, list_species, list_users) by targeting a different resource.
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 implies usage when you need to know available appointment types, but does not explicitly provide context or exclusions. Since there are no sibling tools for this purpose and the tool has no parameters, the guidance is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_breedsB
List animal breeds.
| 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?
Without annotations, the description carries full burden but fails to disclose behavior such as pagination, authentication, or result format.
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 a single short sentence, efficient but borderline under-specified for a tool with no other context.
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 simple operation and presence of an output schema, the description is adequate but lacks any contextual detail beyond the bare minimum.
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 zero parameters, the baseline score of 4 applies; the description adds no param info but schema coverage is 100%.
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 'List animal breeds' uses a specific verb and resource, clearly distinguishing it from sibling tools like list_species or list_appointment_types.
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?
No guidance is provided on when to use this tool versus alternatives like list_species, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_speciesA
List animal species (dog, cat, rabbit, etc.).
| 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 responsibility for behavioral disclosure. It only states the action and examples, omitting details like read-only nature, return format, or whether the list is exhaustive.
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 a single, information-dense sentence that front-loads the verb and resource. No 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 simplicity (no params, output schema exists), the description is functionally complete but could be more helpful by mentioning the output structure or typical use cases. It meets the minimum viable standard.
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?
There are no parameters; schema coverage is trivially 100%. With 0 parameters, baseline is 4. The description adds nothing about parameters, which is acceptable.
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's function: listing animal species. It provides examples (dog, cat, rabbit) which make the purpose unmistakable. It is easily distinguishable from sibling tools like list_breeds.
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?
No guidance is given on when to use this tool vs. alternatives like list_breeds or list_appointment_types. The agent must infer usage from the name alone, which may lead to incorrect selections.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_usersA
List practice users (vets, nurses, receptionists).
| 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 implies a read-only operation but does not disclose potential behaviors like pagination, caching, or data freshness. It adds no detail beyond the obvious list functionality.
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?
A single sentence with 7 words, no redundant information. Every word is purposeful, and the structure is front-loaded with the action and resource.
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 zero parameters, an expected simple output, and the presence of an output schema (not shown but indicated), the description adequately covers the tool's purpose. No additional details are necessary for a straightforward list operation.
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?
There are zero parameters, so the baseline is 4. The description adds value by specifying the user roles (vets, nurses, receptionists) that are included, clarifying the scope beyond the empty schema.
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 uses the verb 'List' with the specific resource 'practice users' and clarifies the types (vets, nurses, receptionists). This distinguishes it from sibling list tools (e.g., list_species, list_appointment_types) which target different entities.
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?
No guidance on when to use this tool versus alternatives, such as search tools or other list tools. There is no mention of prerequisites or context for invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_animalA
Patch an animal record. updates_json is a JSON object with only the
fields you want to change (e.g. '{"name": "Rex II", "weight": 32.4}').
| Name | Required | Description | Default |
|---|---|---|---|
| animal_id | Yes | ||
| updates_json | 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 fully disclose behavior. It only states 'Patch' without detailing idempotency, side effects, required permissions, or error handling. This is insufficient for a mutation 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?
The description is two concise sentences. The first states the purpose, and the second explains the key parameter with an example. No redundant information.
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 low complexity (2 required params, no enums) and the presence of an output schema, the description adequately covers how to use the tool. It could mention that only provided fields are updated, which it already does.
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%, but the description adds significant meaning by explaining that 'updates_json' is a JSON object with only fields to change and providing an example. It does not add detail for 'animal_id', but the parameter is self-explanatory.
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 verb 'Patch' and the resource 'an animal record', distinguishing it from sibling tools like 'create_animal' (create) and 'find_animals' (query).
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 explains to use 'updates_json' with only the fields to change, providing an example. It does not explicitly state when not to use this tool or mention alternatives, but the usage is implied and clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct resource-action pair (e.g., create_animal, find_animals, get_animal, update_animal), with no overlapping purposes. All tools are clearly separable.
All tool names follow a consistent verb_noun pattern in snake_case. Create/find/get/update for nouns, and list_ for type enumerations, with no mixing of styles.
17 tools is well-scoped for a veterinary practice management server. Each tool serves a distinct purpose, covering animals, appointments, consults, contacts, invoices, and administrative lists without unnecessary bloat.
The set covers core CRUD for animals but misses update and delete for appointments, consults, contacts, and invoices. Creation and reading are well-covered, but missing mutability options create gaps for typical workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP server for Cliniko — patients, appointments, availability, and invoices for AI agents.
MCP server for lacita - appointment management software
MCP server for Zooza — class scheduling, attendance, and booking for activity businesses.
MCP server for Codat — companies, connections, invoices, bills and financial statements.
Related MCP Servers
- AlicenseAqualityBmaintenanceRead-only MCP server for Gingr pet-care facility data, enabling queries about owners, animals, reservations, appointments, services, and staff via natural language.711MIT
- FlicenseNot gradedqualityDmaintenanceAn enhanced MCP server for Xero, enabling natural language interaction with your Xero organisation for accounting tasks like invoices, contacts, bank transactions, and payroll.
- FlicenseBqualityDmaintenanceMCP server for interacting with the Eventin booking system, enabling natural language management of bookings, events, and venues.2
- AlicenseNot gradedqualityBmaintenanceEnables managing veterinary clinic operations via natural language by integrating Vetmanager REST API with MCP clients.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sanjibani/ezyvet-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server