Skip to main content
Glama

Bill4Time MCP by usefulapi

Server Details

Read Bill4Time clients, projects, time entries, expenses, invoices, payments, users and contacts.

Ownership verified

The last two health checks of this connector failed. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.

If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.

Status
Unhealthy
Uptime
97.0% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
m190/usefulapi-mcp
GitHub Stars
0

TDQS

A3.9/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct resource (clients, contacts, expenses, invoices, payments, projects, time entries, users) with no overlaps. An agent can easily select the correct tool based on the entity it needs.

Naming Consistency5/5

All tool names follow the exact pattern bill4time_list_<resource>, with consistent snake_case and verb_noun structure. There are no deviations or mixed conventions.

Tool Count5/5

Eight tools map cleanly to eight distinct Bill4Time resources, providing broad read coverage without redundancy. The count is well-scoped for a read-only data access server.

Completeness2/5

The surface is entirely read-only list operations, missing all create, update, and delete capabilities for the domain. Core workflows like recording time entries, creating invoices, or updating client details cannot be performed, which will cause agent failures for common tasks.

Available Tools

8 tools
bill4time_list_clientsList clientsA
Read-only
Inspect

List clients (id, name, billing name, email, phone, city, account manager, status, billing rate type, currency). Filter by status, exact client name, id or creation date. Street addresses and tax ids are not returned. GET /clients.

NameRequiredDescriptionDefault
idNoOnly the record with this id.
topNoRecords to return, 1-100 (default 25).
skipNoRecords to skip (default 0). Pass the previous reply's next_skip to read the next page.
sortNoField to sort by (default: Bill4Time's own order).
statusNo
descendingNoSort descending (newest or highest first). Default ascending.
client_nameNoExact client name (case rules are Bill4Time's).
created_afterNoClients created on or after this date.
created_beforeNoClients created on or before this date.
include_custom_fieldsNoAlso return the custom fields (default false).

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely new behavioral context by disclosing an output exclusion ('Street addresses and tax ids are not returned') plus the underlying GET /clients call, which helps the agent reason about the response. It stops short of describing rate limits or the pagination contract.

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?

Three compact sentences, front-loaded with the returned field set followed by the filter dimensions. Every clause carries information; only 'GET /clients' is endpoint trivia of marginal value to an agent.

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?

With no output schema, enumerating the returned fields and the excluded ones (street addresses, tax ids) is exactly the extra information an agent needs. Pagination and sort defaults live in the schema, and the read-only safety profile is in the annotations, so the remaining gaps are minor.

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 90%, so the schema already documents nearly every parameter, including defaults for top/skip and the sort enum. The description's filter list (status, client name, id, creation date) largely restates those schema-documented fields and adds no format or edge-case detail beyond them, making 3 the appropriate baseline.

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?

States a specific verb and resource ('List clients') and enumerates the returned fields (id, name, billing name, email, phone, city, account manager, status, billing rate type, currency), which separates it from sibling list_* tools on contacts, invoices, etc. The purpose is unambiguous, though it never explicitly names a sibling to contrast with.

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?

Gives implied usage by naming the filterable dimensions ('Filter by status, exact client name, id or creation date'), so an agent can infer when this tool applies. There is no when-not guidance, no mention of alternatives like list_contacts, and no prerequisite/limit context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bill4time_list_contactsList contactsA
Read-only
Inspect

List contacts: name, email, work and mobile phone, city, status, creation date. Filter by status, id or creation date. Street addresses, home phone and notes are not returned. GET /contacts.

NameRequiredDescriptionDefault
idNoOnly the record with this id.
topNoRecords to return, 1-100 (default 25).
skipNoRecords to skip (default 0). Pass the previous reply's next_skip to read the next page.
sortNoField to sort by (default: Bill4Time's own order).
statusNo
descendingNoSort descending (newest or highest first). Default ascending.
created_afterNoContacts created on or after this date.
created_beforeNoContacts created on or before this date.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so safety is covered. The description adds real value beyond them by disclosing which fields are deliberately omitted (street addresses, home phone, notes) and the underlying GET /contacts endpoint, though it says nothing about auth or rate limits.

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?

Three short sentences: result contents first, then filters, then exclusions, then the endpoint. Every clause carries information and nothing is padded.

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?

For an 8-param read tool with no output schema, the description usefully compensates by enumerating returned fields and calling out omitted ones, and pagination semantics live in the schema. It stops short of describing result ordering guarantees or the shape of the paginated reply, but the essentials are present.

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?

With 88% schema description coverage, the schema already documents pagination (top/skip/next_skip), sorting, and date bounds. The description restates the filterable fields (status, id, creation date) without adding format or behavioral detail beyond the schema, so the baseline 3 applies.

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?

States a specific verb and resource ('List contacts') and enumerates the returned fields (name, email, phones, city, status, creation date), which cleanly separates it from sibling list_* tools for clients, invoices, projects, etc. An agent can identify the resource and result shape without opening the schema.

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?

It names the filterable dimensions (status, id, creation date), which implies how to narrow results, but gives no explicit when-to-use guidance, no pointer to a sibling tool, and no exclusions. Usage is inferable but not prescribed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bill4time_list_expensesList expensesA
Read-only
Inspect

List expenses: client, project, user, expense date, cost and sell price, quantity, type, billing status, invoice id, public description. Filter by client, project, user, invoice, expense date range, billing status or exact expense type. Private notes are not returned unless include_private_notes is set. GET /expenses.

NameRequiredDescriptionDefault
idNoOnly the record with this id.
topNoRecords to return, 1-100 (default 25).
skipNoRecords to skip (default 0). Pass the previous reply's next_skip to read the next page.
sortNoField to sort by (default: Bill4Time's own order).
date_toNoExpenses dated on or before this date.
user_idNo
client_idNo
date_fromNoExpenses dated on or after this date.
descendingNoSort descending (newest or highest first). Default ascending.
invoice_idNoOnly expenses on this invoice.
project_idNoA project id, or -1 for expenses that belong to no project.
expense_typeNoExact expense type name.
billing_statusNo
include_custom_fieldsNoAlso return the custom fields (default false).
include_private_notesNoAlso return the private/internal notes (default false). Only set it when the user asks for internal notes.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, non-destructive and open-world, so the safety profile is covered. The description adds real behavioral context beyond them: private notes are withheld by default and only exposed via include_private_notes, and it discloses which fields the response carries. It omits pagination/limit behavior, which keeps it from a 5.

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?

Three dense sentences with the returned-field inventory front-loaded, followed by filterable dimensions and the private-notes caveat. The field enumeration is long but every clause maps to real behavior; no filler text.

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?

With 15 parameters, no required params, and no output schema, the description usefully enumerates the returned fields and the default-hiding of private notes, which is what an agent most needs. It leaves pagination/limit semantics and the include_custom_fields behavior to the schema, which is acceptable given the schema coverage.

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 80%, so the schema already documents most parameters. The description's filter list (client, project, user, invoice, date range, billing status, exact expense type) loosely maps to the undocumented user_id/client_id/billing_status parameters, adding only marginal meaning beyond the schema. Baseline 3 is appropriate.

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?

States a specific verb ('List') plus resource ('expenses') and enumerates what is returned (client, project, user, expense date, cost, sell price, quantity, type, billing status, invoice id, public description). It also names the exact filter dimensions and the underlying endpoint GET /expenses, making it clearly distinguishable from siblings like bill4time_list_invoices or bill4time_list_time_entries.

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?

Gives concrete usage context: which dimensions can be filtered and that private notes are hidden unless the flag is set. It does not, however, state when this tool should be preferred over a sibling (e.g., when to reach for invoices vs expenses) or any exclusion conditions, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bill4time_list_invoicesList invoicesA
Read-only
Inspect

List invoices: client, project, invoice date, status (prebill or finalized), paid status, totals (invoice, labor, expense, late fee), terms and notes. Filter by status, paid status, client, project, id or invoice date range. GET /invoices.

NameRequiredDescriptionDefault
idNoOnly the record with this id.
topNoRecords to return, 1-100 (default 25).
skipNoRecords to skip (default 0). Pass the previous reply's next_skip to read the next page.
sortNoField to sort by (default: Bill4Time's own order).
statusNo
date_toNoInvoices dated on or before this date.
client_idNo
date_fromNoInvoices dated on or after this date.
descendingNoSort descending (newest or highest first). Default ascending.
project_idNo
paid_statusNo
include_custom_fieldsNoAlso return the custom fields (default false).

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered. The description adds no behavioral context beyond that — no pagination behavior, result caps, ordering defaults, or auth/permission notes — and only restates the endpoint ('GET /invoices').

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?

Two tight sentences, front-loaded with the resource and its fields before the filter list. Dense but readable; the field enumeration earns its place since there is no output schema.

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?

With no output schema, the description usefully enumerates returned fields (totals breakdown, terms, notes) and the filter surface. Pagination and sort defaults are left entirely to the schema, which is acceptable given its coverage, but nothing ties the pieces together for a first-time caller.

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 67% and the schema already documents top, skip, sort, descending and include_custom_fields. The description contributes the filter set and clarifies status semantics ('prebill or finalized'), but omits the pagination and sorting parameters entirely, adding only moderate value.

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?

States a specific verb and resource ('List invoices') and immediately enumerates the record's fields, which cleanly separates it from siblings like bill4time_list_payments or bill4time_list_expenses. An agent can identify both what it returns and what it operates on without opening the schema.

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 names the available filter dimensions (status, paid status, client, project, id, date range), which implies when the tool is useful, but gives no explicit when-to-use/when-not guidance and never points to an alternative sibling. Adequate but leaves routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bill4time_list_paymentsList paymentsA
Read-only
Inspect

List payments: client, project, amount, date, type, method, public note. Filter by client, project, id or payment date range. Check numbers are not returned; the private note only with include_private_notes. GET /payments.

NameRequiredDescriptionDefault
idNoOnly the record with this id.
topNoRecords to return, 1-100 (default 25).
skipNoRecords to skip (default 0). Pass the previous reply's next_skip to read the next page.
sortNoField to sort by (default: Bill4Time's own order).
date_toNoPayments dated on or before this date.
client_idNo
date_fromNoPayments dated on or after this date.
descendingNoSort descending (newest or highest first). Default ascending.
project_idNo
include_private_notesNoAlso return the private/internal notes (default false). Only set it when the user asks for internal notes.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, non-destructive, openWorld). The description adds genuinely non-obvious behavior: check numbers are never returned, and private notes appear only when include_private_notes is set. The 'GET /payments' hint confirms the read path. It stops short of describing result shape or default ordering beyond what the schema says.

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?

Three tight sentences: identity and returned fields first, filters second, behavioral caveats last. No filler, no restatement of the title, every clause carries load.

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?

For a 10-parameter, no-output-schema list tool, the description covers returned fields, filter dimensions, and the two surprising behavioral facts. Pagination and sort details live in the schema rather than the description, which is acceptable given the 80% schema coverage.

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 80%, so the baseline is 3; the description goes slightly beyond by summarizing the filter surface (client, project, id, date range) and by documenting the conditional semantics of include_private_notes and the intentional omission of check numbers. Notably client_id and project_id carry no schema description and are only covered here.

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?

Opens with a specific verb+resource ('List payments') and enumerates the returned fields (client, project, amount, date, type, method, public note), so the agent knows exactly what this returns. It does not explicitly name or contrast with sibling list tools, but the payment-specific field list makes ambiguity with list_invoices/list_expenses unlikely.

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?

States the filterable dimensions ('Filter by client, project, id or payment date range') and gives explicit conditional guidance for include_private_notes ('Only set it when the user asks for internal notes'). No alternative tools are named or excluded, but the context for invoking it is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bill4time_list_projectsList projects (matters)A
Read-only
Inspect

List projects (matters): id, name, client, status, billing method, rate overrides, assigned user, created/closed/due dates. Filter by status, billing method, client, id or creation date. GET /projects.

NameRequiredDescriptionDefault
idNoOnly the record with this id.
topNoRecords to return, 1-100 (default 25).
skipNoRecords to skip (default 0). Pass the previous reply's next_skip to read the next page.
sortNoField to sort by (default: Bill4Time's own order).
statusNo
client_idNoOnly projects of this client.
descendingNoSort descending (newest or highest first). Default ascending.
created_afterNoProjects created on or after this date.
billing_methodNo
created_beforeNoProjects created on or before this date.
include_custom_fieldsNoAlso return the custom fields (default false).

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered without description help. The description adds the returned field list and filter surface, but says nothing about pagination behavior (top/skip/next_skip) or result ordering beyond what the schema states.

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?

Three compact clauses: identity, returned fields, filter options, then the HTTP route. It is front-loaded with purpose and free of filler, though the trailing "GET /projects" is low-value for an agent.

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?

With no output schema, the description usefully enumerates the returned fields, and annotations already cover the safety profile. Filtering is described and pagination is delegated to the schema, leaving it largely complete for an agent to call correctly.

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 high (82%), so the schema already documents most parameters, establishing a baseline of 3. The description echoes the filter dimensions (status, billing method, client, id, creation date) but omits sort, top/skip pagination, descending, and include_custom_fields, adding little beyond the schema.

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 opens with a specific verb and resource ("List projects (matters)") and enumerates the fields returned, so the tool's purpose is unambiguous. It differentiates from siblings implicitly via the distinct resource name, but never names or contrasts the sibling list tools explicitly.

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?

"Filter by status, billing method, client, id or creation date" implies when this tool is useful (narrowing a project set), but there is no explicit when-to-use guidance and no routing to sibling tools like list_clients when the agent actually wants clients instead. Usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bill4time_list_time_entriesList time entriesA
Read-only
Inspect

List time entries: client, project, user, entry date, billable and labor time, billable amount, rate, activity, ABA litigation code, billing status, invoice id, public description. Filter by client, project, user, invoice, entry date range or billing status. Private notes and contractor pay rates are not returned unless include_private_notes is set. GET /timeEntries.

NameRequiredDescriptionDefault
idNoOnly the record with this id.
topNoRecords to return, 1-100 (default 25).
skipNoRecords to skip (default 0). Pass the previous reply's next_skip to read the next page.
sortNoField to sort by (default: Bill4Time's own order).
date_toNoEntries dated on or before this date.
user_idNo
client_idNo
date_fromNoEntries dated on or after this date.
descendingNoSort descending (newest or highest first). Default ascending.
invoice_idNoOnly entries on this invoice.
project_idNo
activity_typeNoExact activity type name.
billing_statusNo
include_custom_fieldsNoAlso return the custom fields (default false).
include_private_notesNoAlso return the private/internal notes (default false). Only set it when the user asks for internal notes.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds real context beyond that: private notes and contractor pay rates are withheld by default, and include_private_notes must be set to surface them. It does not discuss pagination or rate limits, but the pagination contract is documented in the schema.

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?

Front-loaded with purpose, then filters, then the privacy caveat, then the endpoint. The long field enumeration is dense but justified because there is no output schema, so it is the only place response fields are described. No filler sentences.

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?

With no output schema and 15 optional parameters, the description compensates by naming the returned fields and the filter/privacy behavior. The remaining gaps (pagination flow, auth requirements, sort defaults) are either covered by the schema or only marginally relevant to a read-only list call.

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 73%, so the schema already documents most parameters (top, skip, sort, descending, date_from/date_to, invoice_id, activity_type, include_private_notes). The description restates the filterable dimensions and reinforces the privacy gating of include_private_notes, but adds no syntax, format, or default detail beyond the schema, and silently omits id, top, skip, sort and include_custom_fields. Baseline 3 is appropriate when the schema does the heavy lifting.

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?

Specific verb ('List') plus resource ('time entries'), with an explicit enumeration of the fields returned and the dimensions available for filtering. It is trivially distinguishable from siblings such as bill4time_list_expenses or bill4time_list_invoices, and it names the backing endpoint (GET /timeEntries).

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?

It states the supported filter dimensions (client, project, user, invoice, entry date range, billing status) and a clear condition for include_private_notes ('unless include_private_notes is set'), which tells the agent when that flag matters. It stops short of explicit when-not guidance or naming an alternative tool, but among the list_* siblings there is little ambiguity to resolve.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bill4time_list_usersList users (timekeepers)A
Read-only
Inspect

List the firm's users: name, email, user type, status, department, position, billing and overtime rate. Birth dates, addresses, phone numbers and contractor pay rates are not returned. Filter by status or id. GET /users.

NameRequiredDescriptionDefault
idNoOnly the record with this id.
topNoRecords to return, 1-100 (default 25).
skipNoRecords to skip (default 0). Pass the previous reply's next_skip to read the next page.
sortNoField to sort by (default: Bill4Time's own order).
statusNo
descendingNoSort descending (newest or highest first). Default ascending.
include_custom_fieldsNoAlso return the custom fields (default false).

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint=false, and openWorldHint, so safety is covered. The description adds genuinely useful context beyond that: the exact field set returned, an explicit privacy exclusion list (birth dates, addresses, phones, contractor pay rates), and the underlying GET /users endpoint.

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?

Three compact sentences: returned fields first, then exclusions, then filtering and endpoint. Dense and front-loaded with no filler, though the endpoint token is mildly redundant.

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?

With no output schema, the description compensates by enumerating returned and withheld fields, which is exactly what an agent needs for a list tool. Pagination is covered by the schema's top/skip/next_skip documentation, so nothing critical is missing.

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 86%, so the schema already documents id, top, skip, sort, descending, and include_custom_fields. The description only restates that status and id act as filters and adds nothing about syntax, enum values, or pagination interaction beyond what the schema provides. Baseline 3 applies.

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?

States a specific verb and resource ('List the firm's users') and enumerates the returned fields plus the ones deliberately withheld, so the agent knows exactly what comes back. It distinguishes itself de facto by resource from siblings like bill4time_list_clients or bill4time_list_invoices, but never names an alternative explicitly.

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?

'Filter by status or id' hints at when to narrow the query, and the exclusion notes tell the agent when not to expect certain data. However, there is no explicit when-to-use framing and no routing against siblings, so usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables read-only querying of Invoice4U accounting data, including documents, customers, branches, tax rates, and Israeli invoice allocation statuses.
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables read-only access to InvoiceNinja data, including invoices, expenses, clients, and tax reports, for AI assistants like Claude.
    1
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.