Skip to main content
Glama
sanjibani

ezyVet MCP

by sanjibani

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

health_check

Diagnostic

Mints a token + lists users

get_animal

Read

Single animal (patient)

find_animals

Read

Search animals

create_animal

Write

New patient

update_animal

Write

Patch patient fields

get_contact

Read

Single contact (owner)

find_contacts

Read

Search owners

create_contact

Write

New owner

find_appointments

Read

List appointments

create_appointment

Write

Book appointment

find_consults

Read

List visits

create_consult

Write

Open visit

find_invoices

Read

List invoices

list_species

Read

Reference: species

list_breeds

Read

Reference: breeds

list_appointment_types

Read

Reference: appointment types

list_users

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_mcp

Need 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

See also

Available Tools

17 tools
create_animalB

Create a new animal (patient). animal_json is a JSON object string matching ezyVet's animal schema (at minimum: name, species_id).

ParametersJSON Schema
NameRequiredDescriptionDefault
animal_jsonYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
appointment_jsonYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
consult_jsonYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contact_jsonYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness2/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
pageNo
limitNo
breed_idNo
species_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNo
end_dateNo
animal_idNo
start_dateNo
appointment_type_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNo
end_dateNo
animal_idNo
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.3/5.0
Behavior2/5

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.

Conciseness2/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
emailNo
limitNo
last_nameNo
first_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNo
end_dateNo
contact_idNo
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
animal_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contact_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
animal_idYes
updates_jsonYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

B3.3/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness3/5

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

ActivitySlowing
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Read-only MCP server for Gingr pet-care facility data, enabling queries about owners, animals, reservations, appointments, services, and staff via natural language.
    7
    11
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    An enhanced MCP server for Xero, enabling natural language interaction with your Xero organisation for accounting tasks like invoices, contacts, bank transactions, and payroll.
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables managing veterinary clinic operations via natural language by integrating Vetmanager REST API with MCP clients.
    1
    MIT

Latest Blog Posts

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