Skip to main content
Glama

little-green-light

Server Details

Search Little Green Light donors, gifts, notes and memberships, and add gifts and contact reports.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL
Repository
m190/usefulapi-mcp
GitHub Stars
0

TDQS

A3.7/5.0

Scored across 20 tools

Disambiguation5/5

Each tool has a clearly distinct resource and action: create/get/update/search constituents, create/get/list/search gifts, create/list notes, create/list contact reports, list memberships, and list lookup entities. The only near-overlap (lgl_list_constituent_gifts vs lgl_search_gifts) is well-differentiated by scope (one constituent vs account-wide search) in the descriptions.

Naming Consistency5/5

All 20 tools use the same lgl_ prefix and a consistent verb_noun snake_case pattern (lgl_create_constituent, lgl_list_funds, lgl_search_gifts, etc.). There are no mixed conventions or vague names.

Tool Count3/5

At 20 tools this is on the heavy side of the 3-15 sweet spot, but most are necessary read-only lookup endpoints for entities referenced by gifts (funds, campaigns, appeals, events, groups, team members, type values). The surface is broad but not clearly excessive for a full CRM.

Completeness3/5

Core create/get/search workflows are covered, but there are notable lifecycle gaps: no delete operations anywhere, no update for gifts, notes, contact reports, or memberships, and update_constituent explicitly cannot edit addresses, emails, or phones, leaving a real dead end for changing contact info.

Available Tools

20 tools
lgl_create_constituentCreate a constituentA
Destructive
Inspect

WRITE: add a new constituent (person or organization) to the account, optionally with email addresses, phone numbers, street addresses and group memberships. LGL's schema marks first_name, last_name and email_addresses as required. Search first (lgl_search_constituents) to avoid creating a duplicate. LGL: POST /api/v1/constituents.

ParametersJSON Schema
NameRequiredDescriptionDefault
genderNo
groupsNoGroup memberships to add.
is_orgNoTrue if this constituent is an organization or company.
prefixNoPrefix, e.g. 'Dr.'.
suffixNo
is_anonNoGives anonymously?
birthdayNoBirthday (YYYY-MM-DD).
org_nameNoOrganization name.
addresseeNoAddressee/label name.
job_titleNo
last_nameYesLast name.
nick_nameNo
first_nameYesFirst name.
salutationNo
is_deceasedNo
maiden_nameNo
middle_nameNo
spouse_nameNoSpouse/partner name.
deceased_dateNoDeceased date.
phone_numbersNoPhone numbers to add.
email_addressesNoEmail addresses to add.
street_addressesNoStreet addresses to add.
annual_report_nameNo
external_constituent_idNoExternal constituent ID (your own system's id).
constituent_contact_type_nameNoConstituent contact type name, e.g. 'Primary'.

TDQS

A4/5.0
Behavior3/5

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

Only destructiveHint=true is provided, so the description usefully labels the operation as a WRITE and gives the underlying endpoint (POST /api/v1/constituents). However it says nothing about permissions/auth, whether a duplicate is rejected or silently created, or what the call returns after the write — the gaps an agent most needs when annotations alone only say 'destructive'.

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 short, front-loaded sentences: write nature first, optional payloads second, duplicate-avoidance and endpoint last. Every sentence earns its place except the inaccurate required-fields claim, which occupies space while misleading.

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?

For a 25-parameter mutation tool with no output schema, the definition covers purpose, optional sub-resources and duplicate avoidance, but leaves out the response shape (e.g. whether the new constituent id is returned for follow-up calls), permission requirements, and duplicate-handling behavior. Adequate but with clear gaps for a tool of this complexity.

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 coverage is 64%, so the description does add value by summarizing that email addresses, phones, addresses and group memberships are optional attachments. But it also asserts that 'LGL's schema marks first_name, last_name and email_addresses as required', and the schema requires only first_name and last_name — a misleading statement that could push the agent into supplying email_addresses unnecessarily. That inaccuracy keeps this below a 4.

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?

Opens with a specific verb+resource ('WRITE: add a new constituent (person or organization) to the account') and enumerates the sub-resources it can carry. It is clearly distinguishable from lgl_update_constituent, lgl_get_constituent and lgl_search_constituents without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative (lgl_search_constituents) and the condition that selects it ('Search first ... to avoid creating a duplicate'), which is the primary risk in a create tool. Nothing about when to reach for search versus create is left to inference.

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

lgl_create_contact_reportLog a contact reportA
Destructive
Inspect

WRITE: log a contact report (a call, email or meeting with a constituent). text is required; the type may be given by id or name (e.g. 'Call'; see lgl_list_type_values type=contact_report_types). LGL: POST /api/v1/constituents/{constituent_id}/contact_reports.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoShort title for the report.
textYesWhat happened.
team_memberNoTeam member who made contact: id, email, or 'first_name last_name'.
original_dateNoDate of the contact (YYYY-MM-DD).
constituent_idYesConstituent id (integer).
contact_report_type_idNo
contact_report_type_nameNoType name, e.g. 'Call', 'Email', 'Meeting'.

TDQS

A4.3/5.0
Behavior4/5

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

The 'WRITE:' prefix and the disclosed endpoint (POST /api/v1/constituents/{id}/contact_reports) go beyond the destructiveHint annotation by telling the agent this is a mutating create scoped to a constituent. It does not mention permissions or rate limits, but the mutation semantics are clear and consistent with annotations.

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?

A compact two-part description: the operation and its field guidance first, then the raw endpoint. Every clause carries information, though the trailing URL could be dropped without much loss.

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 mutation tool with no output schema, the description covers the required fields, the type-resolution path, and the underlying request, which is enough to call it correctly. Return behavior and permissions are the only omissions, and neither is essential here.

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 already 86%, so the baseline is 3; the description adds that text is mandatory and that the report type may be passed as either id or name, plus how to look up valid names. That is meaningful guidance layered on top of the 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?

States a specific verb and resource ('log a contact report') and defines the concept inline ('a call, email or meeting with a constituent'), which disambiguates it from the adjacent lgl_create_note sibling. An agent can tell what this creates 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operative context: text is required, the type may be supplied by id or name, and it routes the agent to lgl_list_type_values with type=contact_report_types for valid values. It does not state when to prefer a contact report over a note, but the context is otherwise actionable.

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

lgl_create_giftRecord a giftA
Destructive
Inspect

WRITE: record a gift (donation, pledge payment, in-kind, etc.) on a constituent's record. This writes a CRM record of a gift that already happened — it does NOT charge a card or move money. Give gift_type_id or gift_type_name (required; see lgl_list_type_values type=gift_types). Fund, campaign, appeal, event, gift category and payment type may each be given by id or by exact name. Set ack_template_name to 'do_not_ack' to skip acknowledgment. LGL: POST /api/v1/constituents/{constituent_id}/gifts.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoGift note.
fund_idNo
is_anonNoGift is anonymous.
event_idNo
appeal_idNo
fund_nameNo
event_nameNo
appeal_nameNo
campaign_idNo
external_idNoExternal gift id (your own system's id).
team_memberNoTeam member credited: id, email, or 'first_name last_name' (see lgl_list_team_members).
check_numberNoCheck/reference number.
deposit_dateNoDeposit date (YYYY-MM-DD).
gift_type_idNoGift type id.
campaign_nameNo
received_dateNoGift date (YYYY-MM-DD).
constituent_idYesConstituent id (integer).
gift_type_nameNoGift type name, e.g. 'Gift'.
payment_type_idNo
received_amountNoGift amount.
deposited_amountNo
gift_category_idNo
ack_template_nameNoAcknowledgment mailing template name, or 'do_not_ack'.
deductible_amountNoTax-deductible amount.
payment_type_nameNoPayment type name, e.g. 'Check', 'Credit Card'.
gift_category_nameNoGift category name, e.g. 'Donation'.

TDQS

A4.3/5.0
Behavior4/5

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

With destructiveHint=true already given, the description adds real context: it is a CRM write, not a money movement, and it explains the id-or-exact-name resolution rule and the 'do_not_ack' sentinel. It does not contradict the annotation (this is a write) and goes beyond it usefully, though return/permission behavior is unstated.

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?

Dense but front-loaded with the WRITE: action and the core caveat, followed by required-parameter and resolution guidance in tight sentences. Every sentence earns its place, though the packed run-on list of id/name fields is slightly heavy to parse.

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 26-parameter mutation with no output schema, the description covers the essential calling semantics (required type, id/name duality, ack opt-out). It omits auth expectations and any return confirmation, leaving a small but non-critical gap.

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 58%, so the description carries weight: it documents the id-or-exact-name pattern shared by fund/campaign/appeal/event/category/payment type, and notably declares gift_type_id/name required even though the schema required-list shows only constituent_id. This adds genuine meaning beyond the 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?

States a specific verb (record/write) and resource (a gift on a constituent's record), and disambiguates from payment tools by clarifying it 'does NOT charge a card or move money.' An agent can distinguish this from lgl_create_constituent and lgl_get_gift without opening either schema.

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?

Clearly frames the context: it records a gift that already happened rather than processing a payment, and points to lgl_list_type_values (type=gift_types) for the required type lookup. It does not, however, name alternatives for updating or retrieving gifts, so the routing is implied rather than exhaustive.

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

lgl_create_noteAdd a noteA
Destructive
Inspect

WRITE: add a note to a constituent's record. text and original_date are required; the note type may be given by id or name (e.g. 'General'; see lgl_list_type_values type=note_types). LGL: POST /api/v1/constituents/{constituent_id}/notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesNote text.
external_idNo
note_type_idNo
original_dateYesDate the note refers to (YYYY-MM-DD).
constituent_idYesConstituent id (integer).
note_type_nameNoNote type name, e.g. 'General'.

TDQS

A4/5.0
Behavior3/5

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

Annotations only expose destructiveHint=true, so the description carries most of the burden. It usefully signals the write nature and the POST endpoint, but it does not state whether notes can later be modified or removed, whether external_id changes idempotency/dedup behavior, or any permission requirements.

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-loads the WRITE marker and requirement facts in one dense sentence, then closes with the endpoint. No filler text, though the raw endpoint path is marginal value for an agent.

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?

For a 6-parameter mutation tool with no output schema and thin annotations, the description covers required fields and type resolution but omits the purpose of external_id and the behavioral/safety details of creating a note. Adequate to invoke correctly, but not fully complete.

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 67%, and the description compensates by confirming text and original_date as required and clarifying the id-vs-name duality for note type, which is the main ambiguity in the schema (note_type_id vs note_type_name). It leaves external_id unexplained, but adds real meaning beyond the schema for the key parameters.

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?

Starts with an explicit operation marker ('WRITE: add a note to a constituent's record'), naming both the verb and the target resource. It is clearly distinguishable from siblings such as lgl_list_constituent_notes and lgl_update_constituent, and it even names the underlying endpoint.

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?

Explains the note-type resolution path (by id or name, e.g. 'General') and routes the agent to lgl_list_type_values with type=note_types for valid values. It gives clear context for how to supply types but does not state when to prefer this tool over listing/updating notes.

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

lgl_get_constituentGet a constituentA
Read-only
Inspect

Full details for one constituent by LGL id: names, salutations, addresses, phone numbers, email addresses, groups, memberships and custom attributes. LGL: GET /api/v1/constituents/{id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesConstituent id (integer).

TDQS

A3.8/5.0
Behavior4/5

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

readOnlyHint=true already establishes this as a safe read, so the bar is lower. The description goes beyond the annotation by disclosing the breadth of returned data (groups, memberships, custom attributes), which is meaningful context for a read whose return shape is not defined by an output schema. No auth or rate-limit detail, but the entity scope is well conveyed.

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 dense sentence that front-loads the action and resource, then lists the returned fields, followed by the API endpoint reference. No padding or redundancy; every clause earns its place.

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 simple one-arg read with annotations covering the safety profile and no output schema, the description supplies enough: what it fetches, by what key, and what data comes back. Missing only explicit guidance on sourcing the id (e.g., via search) and error behavior for an unknown id.

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 100% and the single 'id' parameter is documented as an integer constituent id in the schema. The description's 'by LGL id' matches the schema without adding format, source, or lookup details beyond it, so baseline 3 is appropriate.

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 ('Full details for one constituent by LGL id') and enumerates the returned entity scope (names, salutations, addresses, phones, emails, groups, memberships, custom attributes). This clearly contrasts with the sibling search_constituents by implying a single-record lookup, though it never names that sibling 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?

Usage is implied by 'one constituent by LGL id' – the agent infers this is a single-record fetch rather than a bulk or search operation. However, there is no explicit when-to-use guidance, no note that the id must first be obtained via search_constituents, and no exclusions.

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

lgl_get_giftGet a giftA
Read-only
Inspect

Full details for one gift by id: amount, deductible amount, dates, fund/campaign/appeal/event, payment type, acknowledgment template, tribute and custom fields. LGL: GET /api/v1/gifts/{id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesGift id (integer).

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds value by disclosing what comes back (amount, deductible amount, dates, fund/campaign/appeal/event, payment type, acknowledgment template, tribute and custom fields) — meaningful for a tool with no output schema — though it omits any note on auth, rate limits, or behavior for a missing id.

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?

One front-loaded sentence leading with the retrieval intent, plus a compact endpoint reference. The middle field enumeration is dense but each item earns its place by compensating for the absent 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?

For a one-parameter read tool with annotations covering safety and no output schema, the description supplies the return-field inventory an agent needs and the endpoint mapping. Only the lack of error/not-found behavior keeps it from being fully complete.

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 coverage is 100% and the sole parameter's type and constraint are fully documented in the schema. The description only restates 'by id' without adding format or validity details beyond that, 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 ('Full details for one gift by id') and enumerates the returned fields, which cleanly separates it from the list-oriented siblings lgl_list_constituent_gifts and lgl_search_gifts. The API endpoint mapping reinforces the single-resource scope.

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 phrase 'by id' implies the caller must already have a gift id, which is useful implicit guidance. However, it names no alternatives and does not say when to prefer this over lgl_search_gifts or lgl_list_constituent_gifts, leaving the routing decision to inference.

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

lgl_list_appealsList appealsA
Read-only
Inspect

Fundraising appeals (mailings, emails, asks) with campaign, date, financial goal, cost and active flag. Use the ids and names when recording gifts or filtering searches. LGL: GET /api/v1/appeals.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of entries to return, 1-100. LGL's default is 25.
offsetNoStart at this entry (0-based). Use the previous page's next_item. Default 0.

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, so safety is covered. The description adds the backend mapping (GET /api/v1/appeals), confirming a read operation and no contradiction. It says nothing about pagination behavior or result volume, which would have added real value beyond the annotations.

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 compact sentences plus the endpoint reference; the resource definition is front-loaded and nothing is redundant. Slightly dense in the field listing, but no wasted 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?

For a zero-required-parameter read-only list endpoint with no output schema, the description covers the entity, its attributes and the endpoint. Missing only return-format/pagination shape, which for a simple list tool is a minor gap.

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 coverage is 100%, and both limit and offset carry full descriptions including defaults and next_item guidance, so the schema does the heavy lifting and a baseline 3 applies. The description adds no pagination syntax or semantics of its own.

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 title supplies the verb ('List') and the description defines the resource richly — fundraising appeals are mailings, emails and asks, with campaign, date, goal, cost and active flag. It does not, however, distinguish itself from siblings like lgl_list_campaigns or lgl_list_funds, which an agent could confuse since 'campaign' appears as a property here.

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 sentence 'Use the ids and names when recording gifts or filtering searches' gives downstream usage context, implying the results feed lgl_create_gift and search filters. It stops short of stating when to call this versus lgl_list_campaigns or other list endpoints, 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.

lgl_list_campaignsList campaignsA
Read-only
Inspect

Campaigns with start/end dates, financial goal, code and active flag. Use the ids and names when recording gifts or filtering searches. LGL: GET /api/v1/campaigns.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of entries to return, 1-100. LGL's default is 25.
offsetNoStart at this entry (0-based). Use the previous page's next_item. Default 0.

TDQS

A3.7/5.0
Behavior4/5

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

readOnlyHint=true already establishes it as a safe read, and the description adds genuine value by enumerating the fields the records contain plus the underlying endpoint (GET /api/v1/campaigns). It says nothing about pagination behavior or typical result volume, but the return-content disclosure is meaningful given there is no output 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?

Two compact sentences plus an endpoint reference; the resource and fields are front-loaded and nothing is padded. The opening is a noun fragment rather than a full statement, a minor structural weakness.

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 field enumeration carries the return-shape burden and largely does so. Pagination is covered by the schema, leaving little an agent would still need to know before calling it.

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 100%, so both limit and offset are fully documented in the schema (ranges, defaults, next_item usage). The description adds no parameter-level information beyond that, so the 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?

The description names the resource (campaigns) and enumerates the fields returned (start/end dates, financial goal, code, active flag), which distinguishes it from sibling list tools like lgl_list_appeals and lgl_list_funds. The verb is only implied by the title rather than stated, so it falls short of a 5.

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 hints at downstream use ('Use the ids and names when recording gifts or filtering searches') but gives no guidance on when to pick this over sibling list tools or when not to use it. Usage is implied rather than stated as an explicit condition.

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

lgl_list_constituent_contact_reportsList a constituent's contact reportsB
Read-only
Inspect

Contact reports (calls, emails, meetings) logged for a constituent, with type, date, text and team member. LGL: GET /api/v1/constituents/{constituent_id}/contact_reports.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of entries to return, 1-100. LGL's default is 25.
offsetNoStart at this entry (0-based). Use the previous page's next_item. Default 0.
constituent_idYesConstituent id (integer).

TDQS

B3.4/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes this is a safe read, so the description's lower bar is met by adding useful context: the record types returned and the projected fields (type, date, text, team member). It stops short of describing pagination behavior, result ordering, or empty-result handling.

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 compact sentences with the payload contents front-loaded and the API binding trailing. Nothing is redundant or 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 a simple filtered-list tool with fully covered parameters, a readOnly annotation, and no output schema, the description supplies the field-level return contents an agent would otherwise lack. Slight gap in not stating pagination/result-size behavior, though the schema largely covers it.

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 100%, so limit, offset, and constituent_id are fully documented in the schema itself. The description only restates the constituent path binding via the endpoint string and adds no new parameter semantics, which is the expected baseline 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (contact reports: calls, emails, meetings) scoped to one constituent, and lists the returned fields, so an agent knows exactly what this produces. It does not explicitly contrast with the many sibling list tools (notes, gifts, memberships), but the resource noun is distinctive enough to separate it.

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?

There is no statement of when to use this versus alternatives such as lgl_list_constituent_notes or lgl_create_contact_report, and no prerequisites or exclusions. Usage is only implied by the resource name, so the agent must infer intent 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.

lgl_list_constituent_giftsList a constituent's giftsB
Read-only
Inspect

A constituent's giving history: every gift with amount, date, gift type, fund, campaign, appeal, event and payment type. LGL: GET /api/v1/constituents/{constituent_id}/gifts.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of entries to return, 1-100. LGL's default is 25.
offsetNoStart at this entry (0-based). Use the previous page's next_item. Default 0.
constituent_idYesConstituent id (integer).

TDQS

B3.2/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read, so the description's main added value is the REST endpoint (GET /api/v1/constituents/{constituent_id}/gifts) and the field list, which is useful because no output schema exists. It adds no notes on ordering, pagination behavior, permissions, or empty results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with what the tool returns before the endpoint reference. Nothing is wasted, though the raw endpoint string is arguably debug-oriented filler rather than agent-facing guidance.

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?

With no output schema, enumerating the returned gift fields is a real contribution and covers the main gap. However it says nothing about pagination semantics (the schema defines limit/offset but not how to page through a long giving history) or result ordering.

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 100% — limit, offset and constituent_id are all documented in the schema — so the schema carries the parameter burden. The description adds no syntax or filtering detail beyond what the schema already says, making the baseline 3 appropriate.

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 a specific verb+resource ('A constituent's giving history: every gift...') and enumerates the fields returned, which separates it from lgl_get_gift (single gift) and lgl_search_gifts (cross-constituent). It does not explicitly name those siblings as alternatives, so it stops just short of a 5.

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?

There is no when-to-use guidance: nothing tells the agent to prefer this over lgl_search_gifts when it already has a constituent_id, and no prerequisites or exclusions are stated. The intended usage (fetch all gifts belonging to one constituent) is only implied by the phrase 'giving history'.

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

lgl_list_constituent_membershipsList a constituent's membershipsA
Read-only
Inspect

A constituent's memberships: level, start date and finish date — use it to see whether someone is current or lapsed. LGL: GET /api/v1/constituents/{constituent_id}/memberships.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of entries to return, 1-100. LGL's default is 25.
offsetNoStart at this entry (0-based). Use the previous page's next_item. Default 0.
constituent_idYesConstituent id (integer).

TDQS

A3.5/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read, lowering the bar. The description does add value beyond the annotation by disclosing the returned fields and their relevance to determining current/lapsed status, which matters because there is no output schema. It says nothing about pagination limits or empty-result behavior, so it's adequate but not rich.

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?

One compact sentence front-loads the resource and the returned fields, then the endpoint line maps it to the LGL API. Nothing is wasted, though the trailing "LGL: GET ..." is largely redundant for an agent that already has the tool name.

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 read-only list tool with full schema coverage, safety annotations, and no output schema, the description tells the agent what comes back and why it would call it. Pagination behavior is handled by the schema, 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 100% – limit, offset, and constituent_id all carry their own descriptions including defaults and pagination semantics. The description adds no syntax or format detail beyond the schema, so the baseline 3 is appropriate.

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 names a specific resource (a constituent's memberships) and enumerates the returned fields (level, start date, finish date), so an agent knows exactly what this returns. It doesn't explicitly contrast itself with siblings like lgl_get_constituent or lgl_list_constituent_gifts, but the resource naming is unambiguous enough to separate it.

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?

"use it to see whether someone is current or lapsed" supplies one concrete use case, which is more than nothing. It offers no exclusions or named alternatives (e.g., when to prefer lgl_get_constituent for basic member data), so the routing 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.

lgl_list_constituent_notesList a constituent's notesA
Read-only
Inspect

Notes recorded on a constituent (type, text, original date). LGL: GET /api/v1/constituents/{constituent_id}/notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of entries to return, 1-100. LGL's default is 25.
offsetNoStart at this entry (0-based). Use the previous page's next_item. Default 0.
constituent_idYesConstituent id (integer).

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds the returned field set (type, text, original date) and the underlying API endpoint, but says nothing about pagination behavior, ordering, or empty results beyond what the schema's limit/offset params imply.

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 compact sentences: the first front-loads what is returned, the second supplies the API endpoint for cross-referencing. No filler or redundancy.

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 simple read-only list endpoint with a fully documented schema and an annotation covering safety, the description is nearly sufficient, and it usefully names the return fields in the absence of an output schema. Minor gaps are ordering/pagination semantics, which are only partly implied by the schema.

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 100%, with limit, offset, and constituent_id each fully documented in the schema, so the baseline is 3. The description adds no parameter-level meaning (e.g., whether notes are ordered by date, which affects offset use), so it does not rise above 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 resource (notes on a constituent) and enumerates the returned fields, so an agent can distinguish it from the many sibling list tools (gifts, contact reports, memberships) by resource alone. The verb 'list' is implied rather than stated, but the scope 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the resource-scoped name and stated scope; an agent can infer it lists notes for a given constituent. However, there is no explicit when-to-use guidance, no mention of alternatives such as lgl_create_note for writing notes, and no indication of prerequisites or when this list would be empty.

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

lgl_list_eventsList eventsB
Read-only
Inspect

Events (galas, lunches, board weekends) with dates, campaign, event type, goal and active flag. Use the ids and names when recording gifts or filtering searches. LGL: GET /api/v1/events.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of entries to return, 1-100. LGL's default is 25.
offsetNoStart at this entry (0-based). Use the previous page's next_item. Default 0.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered without the description's help. The description adds useful content — the exact entity shape and the note that the returned ids/names feed gift recording and search filters — but says nothing about volume, pagination behavior, or whether results are sorted.

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 tight sentences, front-loaded with the entity and its fields, followed by downstream-use advice and the API endpoint. No padding, though the endpoint string is marginal value for an agent that only sees the tool interface.

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?

There is no output schema, so the description carries the return-shape burden and does so adequately by enumerating the fields. Combined with annotations covering read-only safety and a fully documented 2-param schema, an agent has enough to call this correctly; only sorting/ordering and result volume are unaddressed.

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 coverage is 100% and both parameters (limit, offset) are fully documented in the schema, including LGL's default of 25 and the next_item usage pattern. The description contributes nothing about limit/offset, so the 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?

The description names the resource (events) and enumerates the meaningful fields returned (dates, campaign, event type, goal, active flag), plus the underlying endpoint GET /api/v1/events. It never states the verb explicitly — 'list' comes only from the title — but the noun phrase plus endpoint make the operation unambiguous and distinguishable from lgl_list_campaigns/funds.

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?

'Use the ids and names when recording gifts or filtering searches' is guidance about consuming the output downstream, not about when to call this tool versus a sibling. There is no trigger condition, prerequisite, or exclusion stated, so the agent must infer when a listing of events is appropriate.

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

lgl_list_fundsList fundsA
Read-only
Inspect

Funds (where gifts are designated) with campaign, code, financial goal and active flag. Use the ids and names when recording gifts or filtering searches. LGL: GET /api/v1/funds.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of entries to return, 1-100. LGL's default is 25.
offsetNoStart at this entry (0-based). Use the previous page's next_item. Default 0.

TDQS

A3.5/5.0
Behavior3/5

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

readOnlyHint=true already covers the safety profile, and the description adds useful context by naming the returned fields and the underlying endpoint (GET /api/v1/funds). It does not mention pagination behavior or default page size, so it adds modest value beyond the annotations.

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 plus an endpoint reference; the field list comes first and the downstream-use hint second. No filler, though the endpoint string is redundant metadata 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?

There is no output schema, and the description compensates by naming the fields returned and the ids/names an agent should reuse. Pagination is fully handled by the schema's limit/offset descriptions, so a read-only list tool is adequately covered.

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 100% — both limit and offset are fully documented with ranges and defaults in the schema — so the baseline of 3 applies. The description adds no extra meaning about pagination semantics beyond what the schema already provides.

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 clear resource ('funds, where gifts are designated') and enumerates the fields it carries (campaign, code, financial goal, active flag), which distinguishes funds from the sibling list_campaigns and list_appeals. It never uses an explicit verb like 'list', but the resource and scope are unambiguous for an agent.

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 sentence 'Use the ids and names when recording gifts or filtering searches' gives a downstream-use hint, tying it to lgl_create_gift and search tools, but it never states when to call this versus a sibling list endpoint (campaigns, appeals, groups) or any exclusion condition.

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

lgl_list_groupsList groupsA
Read-only
Inspect

Constituent groups (e.g. Board Member, Staff, Volunteer) with their ids and keys. Use the ids and names when recording gifts or filtering searches. LGL: GET /api/v1/groups.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of entries to return, 1-100. LGL's default is 25.
offsetNoStart at this entry (0-based). Use the previous page's next_item. Default 0.

TDQS

A3.5/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes this as a safe read. The description adds that it is a GET request and that results carry ids and keys, which is useful, but says nothing about pagination behavior despite the schema exposing limit/offset.

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 short, front-loaded sentences with no filler; the trailing 'LGL: GET /api/v1/groups.' is a minor endpoint mapping rather than an explanation, but it is brief enough not to hurt.

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 simple read-only list tool with no output schema, the description supplies the essential return shape (ids, names, keys) and use context; pagination is covered by the schema. Adequate without over-explaining.

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 100%, so limit and offset are already fully documented in the schema. The description adds no additional parameter meaning, making the baseline 3 appropriate.

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 the resource precisely ('Constituent groups') and gives concrete examples (Board Member, Staff, Volunteer) plus the fields returned (ids, keys). Sibling tools use the same lgl_list_* pattern, so it is distinguishable, though differentiation rests mainly on the resource noun.

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 tells the agent what to do with the output ('Use the ids and names when recording gifts or filtering searches'), which implies why one would call it, but gives no explicit when-to-use/when-not-to-use guidance or named alternatives among the many list/search siblings.

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

lgl_list_team_membersList team membersA
Read-only
Inspect

LGL user accounts on the team (name, email, admin flag) — the values a gift or contact report's team_member refers to. Use the ids and names when recording gifts or filtering searches. LGL: GET /api/v1/team_members.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of entries to return, 1-100. LGL's default is 25.
offsetNoStart at this entry (0-based). Use the previous page's next_item. Default 0.

TDQS

A4.2/5.0
Behavior4/5

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

readOnlyHint=true already establishes safety, and the description adds meaningful context beyond that: the exact fields returned (name, email, admin flag) and the upstream API path. With no output schema, disclosing the returned field set is genuinely useful; it only lacks notes on ordering or default result size (though the schema covers limit/offset).

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 with no filler, front-loading what the tool returns and following with usage and the API path. The opening is a noun fragment rather than a full clause, a minor stylistic wart, but nothing is wasted.

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?

For a simple, annotation-covered list endpoint with two fully documented optional params, the description supplies everything else an agent needs: what the resource is, what fields come back, and how the ids are consumed downstream. No output schema is required given the field enumeration.

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 100% and both limit and offset are fully documented there, including defaults and the next_item pagination hint. The description adds no parameter-level detail, 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 the resource precisely (LGL user accounts on the team) and enumerates the returned fields (name, email, admin flag), so an agent knows exactly what this list tool yields. It also distinguishes itself from siblings by explaining the resource is the referent of a gift's or contact report's team_member, and cites the underlying endpoint.

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?

Explicitly tells the agent when to reach for it: to obtain the ids and names needed when recording gifts or filtering searches, which routes usage toward lgl_create_gift and the search tools. It stops short of naming an alternative tool or stating when not to use it, so it is clear context rather than full routing guidance.

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

lgl_list_type_valuesList lookup valuesA
Read-only
Inspect

The account's configured lookup values for one type — the ids and names other tools accept. gift_types, payment_types and gift_categories come from their own endpoints (GET /api/v1/gift_types, /payment_types, /gift_categories — the last optionally filtered by gift_type_id); every other type from GET /api/v1/types/{type} (contact_report_types, note_types, appeal_types, event_types, email/phone/street/web address types, mailing_types, volunteering_categories, list_types).

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesWhich lookup to list.
limitNoNumber of entries to return, 1-100. LGL's default is 25.
offsetNoStart at this entry (0-based). Use the previous page's next_item. Default 0.
gift_type_idNoOnly for type=gift_categories: restrict to one gift type.

TDQS

A4/5.0
Behavior4/5

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

readOnlyHint=true already covers the safety profile, so the description's added value is the endpoint-routing detail (which types come from dedicated endpoints, which from /types/{type}) and the fact that these are static configured lookup values. It does not discuss pagination behavior or whether results are cached, but for a read-only reference call the disclosed context is solid.

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?

Front-loaded with the core purpose, but the long parenthetical listing raw endpoint paths and re-enumerating all fourteen type values duplicates the enum already in the schema. That bulk dilutes rather than helps the 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 says the return is ids and names, and pagination is fully specified in the input schema. Complete enough to call correctly, though it could note result ordering or an approximate size of each lookup.

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 100%, so the baseline is 3; the schema already documents type, limit, offset, and the gift_type_id filter. The description's note that gift_categories can be 'optionally filtered by gift_type_id' merely restates what the schema says, adding no format or edge-case detail.

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 ('the account's configured lookup values for one type') and immediately clarifies what the caller gets back ('the ids and names other tools accept'). It is clearly distinguished from siblings, which are list/get tools for domain entities rather than this reference-data endpoint.

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 phrase 'the ids and names other tools accept' communicates the purpose context (resolve valid IDs before calling create/update tools), and the description routes each type to its backing endpoint. However, it never states explicitly when to reach for this tool versus just calling a sibling list tool, so guidance is clear but not exhaustive.

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

lgl_search_constituentsSearch constituentsA
Read-only
Inspect

Search active constituents (donors, members, volunteers, organizations). Give name and/or email for the common case, or raw terms. Available term fields: name, eaddr (email contains), phone_number, street, city, state (2-letter), postal_code, country, keyword (keyword id), updated_from / updated_to (YYYY-MM-DDTHH:MM:SSZ), membership_status (0 lapsed, 1 active), membership_level (comma-separated ids), membership_end_date_from / _to (YYYY-MM-DD), external_id, constituent_type (0 individual, 1 organization), groups (comma-separated group ids), lists (comma-separated list ids), custom_attr (key|op|value). At least one term is required. LGL: GET /api/v1/constituents/search.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoAny name field contains this.
sortNoSort by name, external_id, lgl_id, date_created, date_updated, membership_level or membership_end_date_from. Append '!' to reverse (e.g. date_updated!).
emailNoEmail address contains this.
limitNoNumber of entries to return, 1-100. LGL's default is 25.
termsNoExtra raw LGL search terms, each 'field=value' (combined with AND). See the tool description for the available fields.
expandNoRelated records to include inline on each constituent.
offsetNoStart at this entry (0-based). Use the previous page's next_item. Default 0.

TDQS

A4.4/5.0
Behavior4/5

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

readOnlyHint already covers the safety profile, and the description adds real behavioral context beyond it: results are limited to *active* constituents, at least one term is mandatory, and exact date formats (YYYY-MM-DDTHH:MM:SSZ vs YYYY-MM-DD) are specified. It stops short of describing return shape or result caps.

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: purpose and the common-case input pattern come first, then the reference list. The term enumeration is a dense run-on but every token is a usable field/value spec, so it earns its space despite packing a lot into one paragraph.

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?

There is no output schema, so the description should carry the burden; it covers input semantics thoroughly and the offset parameter hints at paging via 'the previous page's next_item'. It never states what a result object contains, which is the one material gap for an agent assembling a query.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so 3 is the baseline, but the description goes well past the schema by enumerating every valid `terms` field and its value grammar (0 lapsed/1 active, 2-letter state, comma-separated ids, key|op|value for custom_attr). The `terms` schema entry itself defers to this description, making it load-bearing rather than redundant.

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+resource ('Search active constituents') plus the entity types covered (donors, members, volunteers, organizations). It is clearly distinguishable from siblings like lgl_get_constituent (single fetch) and lgl_list_constituent_gifts (related records).

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?

Guides input choice explicitly: 'Give `name` and/or `email` for the common case, or raw `terms`', and states the hard prerequisite 'At least one term is required.' It does not, however, say when to prefer this over sibling search/fetch tools such as lgl_get_constituent.

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

lgl_search_giftsSearch giftsA
Read-only
Inspect

Search active gifts across the account — e.g. everything received in a date range, or gifts to one fund or campaign. Give date/updated bounds and/or raw terms. Available term fields: date_from / date_to (YYYY-MM-DD), gift_types (in|ni + comma ids, e.g. in|1,7), gift_amount (gte|lte|btw|gt|lt|eq|ne + number[s], e.g. btw|100|1000), payment_types, campaigns, funds, appeals, events, categories (in|ni|bl + comma ids), appeal_types, event_types, constituent_type (0/1), gift_ids, external_gift_ids, created_from / created_to and updated_from / updated_to (YYYY-MM-DDTHH:MM:SSZ). At least one term is required. LGL: GET /api/v1/gifts/search.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoSort by name, gift_amount, date, date_created, date_updated, fund, appeal, campaign or gift_type. Append '!' to reverse (e.g. date!).
limitNoNumber of entries to return, 1-100. LGL's default is 25.
termsNoExtra raw LGL search terms, each 'field=value' (combined with AND). See the tool description for the available fields.
expandNoDonor fields to include inline on each gift.
offsetNoStart at this entry (0-based). Use the previous page's next_item. Default 0.
date_toNoGift date to (YYYY-MM-DD).
date_fromNoGift date from (YYYY-MM-DD).
updated_toNoUpdated to (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ).
updated_fromNoUpdated from (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ).

TDQS

A4/5.0
Behavior4/5

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

readOnlyHint=true already tells the agent this is a safe read. The description adds real behavioral context beyond that: results are limited to *active* gifts, and at least one filtering term is mandatory, which means this cannot be used as a bare enumeration. Return format and pagination semantics are left unstated.

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?

Purpose and the required-term precondition are front-loaded, and the term-field enumeration is dense but each entry earns its place by teaching operators the schema does not. The single long comma-chained list is a wall of text, which keeps it out of 5 territory.

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 read-only search tool with no output schema, it covers purpose, mandatory input, the term mini-language, and the underlying LGL endpoint. It omits response shape and pagination mechanics, though offset/limit in the schema hints at paging.

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 100%, so the baseline would be 3, but the description absorbs the semantics of the `terms` parameter: the schema merely says 'See the tool description for the available fields,' and the description then enumerates each field and its operator syntax (gt/lt/btw/in/ni, date formats). That is genuine added meaning above 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?

States a specific verb and resource ('Search active gifts across the account') and gives two concrete usage examples (everything in a date range, or gifts to a fund/campaign). It does not differentiate itself from the sibling lgl_list_constituent_gifts, which is the likely confusion point, so it stops short of 5.

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?

Clearly states how to invoke it (supply date/updated bounds and/or raw `terms`) and enforces a hard precondition ('At least one term is required'). It never names an alternative tool or a when-not condition, so it is clear context without routing guidance.

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

lgl_update_constituentUpdate a constituentA
Destructive
Inspect

WRITE: change scalar fields on an existing constituent (name, salutation, job title, org name, deceased flag, etc.). Only the fields you pass are sent. LGL's update schema marks first_name and last_name as required, so pass the current values (from lgl_get_constituent) if you are not changing them. Addresses, emails and phones are not edited here. LGL: PATCH /api/v1/constituents/{id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesConstituent id (integer).
genderNo
is_orgNoTrue if this constituent is an organization or company.
prefixNoPrefix, e.g. 'Dr.'.
suffixNo
is_anonNoGives anonymously?
birthdayNoBirthday (YYYY-MM-DD).
org_nameNoOrganization name.
addresseeNoAddressee/label name.
job_titleNo
last_nameYesLast name (required by LGL even when unchanged).
nick_nameNo
first_nameYesFirst name (required by LGL even when unchanged).
salutationNo
is_deceasedNo
maiden_nameNo
middle_nameNo
spouse_nameNoSpouse/partner name.
deceased_dateNoDeceased date.
annual_report_nameNo
external_constituent_idNoExternal constituent ID (your own system's id).
constituent_contact_type_nameNoConstituent contact type name, e.g. 'Primary'.

TDQS

A4.1/5.0
Behavior4/5

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

With only destructiveHint=true in annotations, the description usefully adds PATCH/partial-update semantics ('only the fields you pass are sent') and the required-field quirk. It does not cover auth needs or rate limits, but it meaningfully exceeds the annotation baseline.

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?

Four tight sentences, front-loaded with the 'WRITE:' marker, each carrying distinct information (scope, partial-update, required-field caveat, endpoint). Nothing 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?

For a 22-param mutation with no output schema and minimal annotations, the description covers the crucial behaviors an agent needs: write nature, partial update, required fields, and exclusion of contact data. Return format is unnecessary since no output schema exists.

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 59% across 22 params, so the description must help. It explains the important first_name/last_name required-even-when-unchanged behavior and enumerates representative editable scalar fields, adding value beyond the schema for the parameters that matter most.

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 (change/update) and resource (scalar fields on an existing constituent) with concrete example fields. It clearly delimits scope by excluding addresses, emails and phones, though it does not name the sibling tool that handles those, so differentiation from siblings is partial.

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 real operational guidance: 'Only the fields you pass are sent' and to pass current values from lgl_get_constituent when first_name/last_name are unchanged. It signals which data is out of scope, but never names the alternative tool for editing contact details.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 20 tool updates
    • First observedlgl_create_constituent
    • First observedlgl_create_contact_report
    • First observedlgl_create_gift
    • First observedlgl_create_note
    • First observedlgl_get_constituent
    • First observedlgl_get_gift
    • First observedlgl_list_appeals
    • First observedlgl_list_campaigns
    • First observedlgl_list_constituent_contact_reports
    • First observedlgl_list_constituent_gifts
    • First observedlgl_list_constituent_memberships
    • First observedlgl_list_constituent_notes
    • First observedlgl_list_events
    • First observedlgl_list_funds
    • First observedlgl_list_groups
    • First observedlgl_list_team_members
    • First observedlgl_list_type_values
    • First observedlgl_search_constituents
    • First observedlgl_search_gifts
    • First observedlgl_update_constituent

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.