Skip to main content
Glama
piersonr

little-green-light-mcp

by piersonr

little-green-light-mcp

Little Green Light 기부자 CRM을 위한 읽기 전용 MCP 서버입니다. 모든 stdio MCP 클라이언트는 이를 사용하여 기부자를 검색하고, 날짜 범위 내 기부 목록을 확인하거나, 한 사람의 기부 이력을 가져올 수 있습니다.

서버 이름은 lgl-mcp입니다. 등록 방법은 호스트에 따라 다릅니다 — 설정을 참조하세요.

설계상 읽기 전용

이 서버에는 생성, 업데이트 또는 삭제 도구가 없습니다 — 비활성화된 것이 아니라 아예 존재하지 않습니다. lgl.js는 GET 요청 함수만 노출합니다; 이 프로젝트 어디에도 기부자 레코드를 변경할 수 있는 코드 경로는 없습니다. 변경 후에는 npm run audit:readonly를 실행하여 기계적으로 확인하세요.

향후 쓰기 경로(예: 기부 동기화)는 여기가 아니라 LGL 자체의 검토된 통합 대기열에 속합니다.

Related MCP server: SQL Server MCP

설정

  1. LGL에서 API 키를 받으세요: 설정 → 통합 설정 → LGL API.

  2. 이를 ~/.config/lgl-mcp/env에 넣으세요(이미 생성됨, chmod 600):

    LGL_API_KEY=your-key-here

    또는 lgl-api-key라는 macOS 키체인 항목을 추가하거나, 일회성 실행을 위해 LGL_API_KEY 환경 변수를 설정하세요. 키는 로그에 기록되거나 커밋되거나 오류 메시지에 출력되지 않습니다.

  3. 종속성 설치(첫 체크아웃 시 이미 완료됨):

    npm install
  4. stdio MCP 호스트를 이 서버로 지정하세요. 명령어는 node이고, 인수는 index.js의 절대 경로입니다:

    {
      "command": "node",
      "args": ["/absolute/path/to/little-green-light-mcp/index.js"]
    }

    호스트에서 사용하는 구성 형태(mcpServers, 최상위 서버 맵 등)로 이를 감싸세요. 키가 ~/.config/lgl-mcp/env 또는 키체인에 있으면 추가 환경 변수가 필요하지 않습니다. 일회성 재정의를 위해서만 호스트의 env 블록에 LGL_API_KEY를 설정하세요.

도구

도구

기능

search_constituents

이름 또는 정확한 이메일 주소로 검색합니다. 간결한 행은 신원 정보만 포함하며 기부 총액은 없습니다.

get_constituent

ID로 한 기부자의 전체 프로필을 가져옵니다. 전체 기부 기록에서 계산된 기부 총액 포함(없으면 0).

get_constituent_gifts

한 기부자의 기부 내역을 가져옵니다.

search_gifts

모든 기부자를 대상으로 날짜 범위로 기부를 검색합니다.

list_funds

모든 설정된 기금(캐시됨).

list_appeals

모든 설정된 호소(캐시됨).

list_gift_categories

모든 설정된 기부 카테고리(캐시됨).

list_gift_types

모든 설정된 기부 유형(캐시됨).

모든 도구는 verbose: true를 허용하여 요약된 버전 대신 전체 LGL 객체를 가져옵니다. 간결한 기부자는 이름, 이메일, 전화번호, 도시/주를 포함합니다. 기부 날짜와 평생 총액은 get_constituent에만 있습니다. 간결한 기부는 날짜, 금액, fund_id, 메모, 기부자 이름(확장 시)을 포함합니다. 제한된 목록 응답에는 생략된 결과 수를 알려주는 note 필드가 포함됩니다 — 아무것도 조용히 잘리지 않습니다.

확인된 쿼리 구문

LGL의 /constituents/search와 /gifts/search는 자유 텍스트가 아닌 q[]=field=value 쌍을 사용합니다 — 이는 여러 필드에 대해 문서화되지 않았으며 실제 계정을 탐색하여 확인되었습니다:

  • 기부자: name=<text> (LGL 자체 문서화 예제) 또는 정확한 이메일 일치를 위한 eaddr=<email> (문서화되지 않음; email=/email_address= 같은 추측은 거부됨).

  • 기부: date_from=YYYY-MM-DD / date_to=YYYY-MM-DD (실제 필터로 확인됨 — 범위를 벗어난 날짜는 total_items를 0으로 만듦). 여러 q[] 항목은 AND로 결합됩니다.

  • 이 엔드포인트에는 기부에 기금 또는 금액 필터가 없습니다 — fund_id, fund, fund_ids, campaign_id, amount_from, amount_to가 모두 시도되었지만 알 수 없는 매개변수로 거부되었습니다. search_gifts는 이를 노출하지 않습니다; 필요 시 클라이언트 측에서 fund_id / note로 결과를 필터링하세요.

  • 기부의 기부자 이름은 요청에 expand=first_name,last_name,org_name이 포함된 경우에만 나타납니다 — 그렇지 않으면 LGL은 기부 응답에 기부자 객체를 중첩하지 않습니다.

  • get_constituent의 기부 총액 (첫/마지막 기부 날짜, 평생 금액)은 LGL이 기부자 객체에서 전혀 반환하지 않습니다 — 여기서 해당 기부자의 자체 기부 기록에서 계산되며, 페이지를 완료할 때까지 수행됩니다. 기부가 없는 기부자는 lifetime_amount: 0을 반환합니다. 안전 한도(10,000건의 기부)가 여전히 적용됩니다; 한도에 도달하면 응답에 명시됩니다.

개발

npm run inspect          # MCP Inspector — exercise tools interactively
npm run audit:readonly   # mechanical check: no POST/PATCH/PUT/DELETE anywhere

속도 제한

LGL은 5분당 300회의 API 호출을 허용합니다. lgl.js는 내부적으로 조절(슬라이딩 윈도우)하며 429/5xx 오류 시 백오프로 재시도하므로, 많은 호출로 분산되는 광범위한 질문은 오류 대신 우아하게 성능이 저하됩니다.

Available Tools

8 tools
get_constituentget_constituentA

Fetch one constituent's profile by LGL id, including giving totals computed from the full gift history.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesLGL constituent id.
verboseNoReturn the full, untrimmed LGL object instead of the compact summary.

TDQS

A4/5.0
Behavior3/5

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

The description explains the key behavioral trait: 'giving totals computed from the full gift history' – an important detail not obvious from the name. With no annotations provided, the description carries full burden for behavioral disclosure. It doesn't clarify idempotency, performance implications (computation might be slow), or whether verbose=true also includes these totals. This is adequate but not comprehensive for an un-annotated tool.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that clearly states the action, the input, and the unique output. Every word adds value with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (2 params, no output schema, no nested objects), the description adequately covers fetching by ID and the computed totals. It could improve by noting whether giving totals appear only in the compact summary or also in verbose mode, and whether the tool requires specific permissions. But overall it is sufficient for an agent to use 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 100%, so both parameters are documented in the schema. The description adds no additional parameter-level detail beyond what the schema already provides (the id field description is simply 'LGL constituent id.' and verbose says 'Return the full, untrimmed LGL object instead of the compact summary.'). Baseline score of 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?

The description uses a specific verb ('Fetch') and clearly identifies the resource ('one constituent's profile') and the identifier ('LGL id'). It also distinguishes itself from sibling tools like search_constituents (search vs. fetch by ID) and get_constituent_gifts (profile vs. gifts list). Including 'giving totals computed from the full gift history' adds distinct value.

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

Usage Guidelines4/5

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

The description implies usage when you have a specific LGL id and need a full profile with computed giving totals, which differentiates from search_constituents (when you don't have an ID) and get_constituent_gifts (when you need gift details, not totals). However, it lacks explicit when-not-to-use or alternative guidance for borderline cases.

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

get_constituent_giftsget_constituent_giftsA

List the giving history for one constituent, most recent first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesLGL constituent id.
limitNoMax results (default 25, max 100).
offsetNoNumber of results to skip, for paging.
verboseNoReturn the full, untrimmed LGL object instead of the compact summary.

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool lists data (implying read-only) and orders results by recency, but omits details like pagination default behavior (limit/offset only via params), whether deleted gifts are included, or rate limits. The description adds some value beyond the schema but leaves gaps.

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

Conciseness5/5

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

The description is a single, concise sentence that immediately conveys the tool's purpose, with no filler or redundancy. It earns its place completely.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 4 parameters with full schema coverage, no output schema, and no annotations, the description explains the core action but doesn't cover usage context like prerequisite (valid constituent ID) or edge cases (empty history). It's minimally complete for a list tool but could be more helpful.

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 description does not add any parameter-specific context beyond what the schema already provides via descriptions for 'id', 'limit', 'offset', and 'verbose'. This is adequate but not enhancing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description uses a specific verb ('List'), a clear resource ('giving history'), and a specific scope ('one constituent'). It also states the ordering ('most recent first'), which distinguishes it from sibling tools like 'search_gifts' or 'search_constituents'.

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?

The description does not provide any guidance on when to use this tool versus alternatives (e.g., 'search_gifts' for multi-constituent queries). It also fails to mention that it requires a constituent ID, which is implied from context but not explicit.

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

list_appealslist_appealsA

List all appeals configured in LGL. Small, rarely-changing reference data — cached for this session after the first call.

ParametersJSON Schema
NameRequiredDescriptionDefault
verboseNoReturn the full, untrimmed LGL object instead of the compact summary.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description fully carries the burden of disclosure. It openly states the tool is read-only ('List'), the data is 'small, rarely-changing,' and that results are 'cached for this session after the first call.' This is valuable behavioral context beyond just the schema. No contradictions.

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

Conciseness5/5

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

Two sentences, zero wasted words. The first sentence states purpose, the second provides behavioral context (caching, data nature). Information is front-loaded and every sentence 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?

Given the tool is a simple list with one optional parameter and no output schema, the description is sufficiently complete. It covers purpose, data characteristics, and caching behavior. The only minor gap is not describing the default output format (compact summary), but this is implied by the verbose parameter description.

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 single parameter 'verbose' is fully documented in the schema. The description adds no additional meaning or usage guidance beyond what the schema provides. Baseline 3 is appropriate; the description doesn't enhance parameter semantics but also doesn't need to.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description explicitly states 'List all appeals configured in LGL,' using a specific verb ('List') and resource ('appeals'). It clearly distinguishes from siblings like search_constituents or list_funds by focusing on the appeals entity. The caching hint adds further precision about scope and refresh behavior.

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

Usage Guidelines4/5

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

The description implies use via the verb 'List' and notes it's 'small, rarely-changing reference data' and 'cached for this session after the first call.' This suggests efficiency but doesn't explicitly state when not to use it or mention alternatives like search_gifts for other lookups. Still, the context is clear enough for an agent to decide.

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

list_fundslist_fundsA

List all funds configured in LGL. Small, rarely-changing reference data — cached for this session after the first call.

ParametersJSON Schema
NameRequiredDescriptionDefault
verboseNoReturn the full, untrimmed LGL object instead of the compact summary.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description fully shoulders the burden of disclosing behavior. It reveals that the tool returns all funds (no filtering), data is small and rarely-changing, and results are cached per session. This explains idempotency and performance traits, though it omits specifics like return format or authentication needs.

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

Conciseness5/5

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

The description is only two sentences, each earning its place: the first states purpose, the second adds behavioral context (caching, data size). It is front-loaded and contains no redundancy or filler words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool is simple (one optional param, no output schema), the description covers purpose and caching but does not specify the return structure or indicate whether it returns a list of fund objects. Without an output schema, the agent might need more details about the response format to use the tool confidently.

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

Parameters3/5

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

The single parameter 'verbose' is fully described in the input schema with clear explanation ('Return the full, untrimmed LGL object instead of the compact summary'). The tool description adds no additional meaning beyond the schema, so it meets the baseline for high schema coverage without adding extra 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?

The description clearly states 'List all funds configured in LGL' with a specific verb and resource. It also adds useful context about the data being small and rarely-changing, distinguishing it from other list tools for different entities (e.g., list_appeals, list_gift_categories).

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

Usage Guidelines4/5

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

The description implicitly guides usage by noting the data is cached for the session after the first call, suggesting efficiency and infrequent need to re-call. It does not explicitly compare to siblings or state when not to use, but the context is clear enough for a simple reference data list.

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

list_gift_categorieslist_gift_categoriesA

List all gift categories configured in LGL. Small, rarely-changing reference data — cached for this session after the first call.

ParametersJSON Schema
NameRequiredDescriptionDefault
verboseNoReturn the full, untrimmed LGL object instead of the compact summary.

TDQS

A3.8/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It discloses caching behavior and data nature, which is useful. However, it does not explicitly state read-only safety, potential errors, or behavior when no categories exist. 'List' implies read-only but not explicit.

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

Conciseness5/5

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

Two concise sentences, front-loaded with the primary action, then a sentence adding behavioral context. No wasted words.

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 list tool with one optional parameter and no output schema, the description provides purpose, data scope, and caching behavior. It doesn't describe return format explicitly, but 'List' implies returning categories. Moderate completeness.

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

Parameters3/5

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

Schema already fully describes the only parameter 'verbose' with its own description, so coverage is 100%. The tool description adds no additional parameter context, matching the baseline of 3.

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?

Description uses specific verb 'List' and resource 'gift categories configured in LGL', clearly stating what it does. However, it does not explicitly differentiate from sibling list tools like list_funds or list_gift_types, though the resource name is distinct.

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?

Provides clear context: 'Small, rarely-changing reference data — cached for this session after the first call' explains when this tool is appropriate and suggests efficient repeated use. Does not name alternatives or exclusions, but context is sufficient for a simple list tool.

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

list_gift_typeslist_gift_typesA

List all gift types configured in LGL. Small, rarely-changing reference data — cached for this session after the first call.

ParametersJSON Schema
NameRequiredDescriptionDefault
verboseNoReturn the full, untrimmed LGL object instead of the compact summary.

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It goes beyond a basic purpose statement by revealing that the data is cached for the session after the first call and noting it is small and rarely-changing. This adds meaningful context about performance and staleness expectations. It does not cover authentication or detailed output but these are minor omissions for a simple list tool.

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

Conciseness5/5

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

The description is two sentences with zero waste. It is front-loaded with the primary purpose and adds a second sentence for extra behavioral context. Every word 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?

Given the tool's simplicity (one optional parameter, no output schema, no annotations), the description covers the key aspects: what the tool does, the nature of the data, and caching behavior. It does not describe the return format explicitly, which would be helpful since there is no output schema. However, for a straightforward list tool, this is nearly 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?

The input schema has 100% coverage (one boolean parameter 'verbose' with description). The tool description does not add any additional meaning to the parameter beyond what the schema already provides. Baseline 3 is appropriate since the schema handles parameter semantics adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description uses a specific verb ('List'), identifies the resource ('all gift types'), and includes the scope ('configured in LGL'). It also adds useful nuance about the data being small and rarely-changing. The name and context clearly distinguish it from sibling listing tools like list_funds or list_appeals, though no explicit differentiation is stated.

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

Usage Guidelines3/5

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

The description implies when to use this tool (for gift types reference data) but does not explicitly state when not to use it or provide alternatives. The mention of caching suggests it is efficient to call repeatedly, but no direct comparison to siblings is given. Usage guidance is implied but not formalized.

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

search_constituentssearch_constituentsA

Search LGL constituents by name or email address. Returns a compact summary per match (name, email, phone, city/state). Giving totals are not included — use get_constituent for those. Pass verbose:true for the full record.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (default 25, max 100).
queryYesA name (e.g. 'Pierson') or an email address to match exactly.
offsetNoNumber of results to skip, for paging.
verboseNoReturn the full, untrimmed LGL object instead of the compact summary.

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the burden of behavioral disclosure. It clearly states that the default return is a compact summary (listing fields), that giving totals are excluded, and that setting verbose:true returns the full record. These details are beyond what the schema provides and accurately represent the tool's behavior.

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

Conciseness5/5

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

The description is two short sentences that front-load the purpose and then provide critical usage hints. Every sentence adds meaningful information—no filler, no repetition. It is efficient and well-structured for quick scanning by an AI 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?

Given no output schema, the description adequately explains the return format (compact summary fields) and distinguishes it from get_constituent. It notes the searchable fields (name, email) and the verbose option. Some minor gaps exist: pagination behavior (offset/limit) is not elaborated, and ordering is not mentioned. However, for a search tool, these are secondary; the core information is presented sufficiently.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The description adds value by explaining the default behavior (compact summary) and that verbose:true yields the full record. This clarifies the distinction between default and verbose output, which the schema alone does not emphasize. The description does not add to limit/offset meaning, but the added context for verbose and the query parameter (name/email) justify 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?

The description explicitly states 'Search LGL constituents by name or email address' and specifies the returned compact summary fields. It distinguishes itself from sibling tools like get_constituent (which provides giving totals) and search_gifts (different resource), so the purpose is clearly defined and not confused with others.

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

Usage Guidelines4/5

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

The description gives direct guidance: 'Giving totals are not included — use get_constituent for those.' This tells the agent when to use this tool versus the sibling get_constituent. It also mentions passing verbose:true for the full record, advising on optional behavior. It lacks explicit 'when not to use' statements but the alternative is clear, making it a strong 4.

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

search_giftssearch_giftsA

Search gifts across all constituents by date range. Useful for totals and reconciliation questions (e.g. 'gifts in 2025'). Fund/amount filtering isn't exposed by LGL's search endpoint — filter the results client-side if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (default 25, max 100).
offsetNoNumber of results to skip, for paging.
to_dateNoYYYY-MM-DD, inclusive.
verboseNoReturn the full, untrimmed LGL object instead of the compact summary.
from_dateNoYYYY-MM-DD, inclusive.

TDQS

A3.9/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It discloses date-range support and the filtering limitation but omits behavioral details like pagination behavior, whether results are sorted, or any permissions required. 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.

Conciseness5/5

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

Two concise sentences. First states purpose, second provides use case and a key limitation. No filler or redundancy; excellent front-loading.

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?

Adequate for a search tool with 5 parameters but no output schema. Covers primary filtering and a limitation, but does not describe the return format or what 'search' means beyond dates (e.g., does it search by gift amount, type, etc.?). Missing output details moderate completeness.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds no extra meaning beyond what the schema provides; it only reinforces 'by date range' which is already clear from from_date/to_date fields.

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?

Clearly states 'Search gifts across all constituents by date range' with a specific verb, resource, and scope. Distinguished from siblings like search_constituents and get_constituent_gifts by emphasizing broad cross-constituent search with date filtering.

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 mentions use case ('totals and reconciliation questions') and gives an example. Also notes a limitation (no fund/amount filtering) and a workaround. However, does not explicitly tell the agent when not to use this tool versus alternatives like get_constituent_gifts for individual lookup.

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. 8 tool updatesv0.1.0
    • First observedget_constituent
    • First observedget_constituent_gifts
    • First observedlist_appeals
    • First observedlist_funds
    • First observedlist_gift_categories
    • First observedlist_gift_types
    • First observedsearch_constituents
    • First observedsearch_gifts

TDQS

A3.9/5.0

Scored across 8 tools

Disambiguation4/5

Tools are mostly distinct: list_funds, list_appeals, list_gift_categories, list_gift_types each target a different reference data type. search_constituents and get_constituent both relate to constituents but search is for lookup by name/email while get_constituent is for a specific ID with more detail. get_constituent_gifts and search_gifts are distinct (one per constituent, one across all). Only slight overlap between search_constituents and get_constituent, but descriptions clarify their purposes.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern: 'list_' for reference data, 'search_' for search operations, 'get_' for fetching a single record, and 'get_constituent_gifts' for the gift history. This is uniform and predictable.

Tool Count5/5

8 tools is well within the ideal 3-15 range. The server covers a focused set of operations for an LGL (Little Green Light) integration: listing reference data, searching constituents, fetching details, and querying gifts. Each tool has a clear purpose, and none seem redundant.

Completeness3/5

The tools cover querying and searching capabilities well, but there are no create, update, or delete operations, so it's a read-only surface. For a CRM/donation tool, one might expect capabilities like adding a gift or updating a constituent, but the server's stated purpose is not explicit about that. The lack of write operations is a notable gap for full lifecycle coverage, but it may be intentional for this MCP server.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server for Microsoft SQL Server integration that enables users to query, monitor, and analyze databases directly through Claude. It supports schema exploration, performance analysis, and optional write operations via natural language commands.
    3 npm
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    A read-only MCP server for SQL Server database introspection that enables Claude to explore and query databases via tools like listing objects and executing SELECT queries.
    20
    1
    MIT
  • A
    license
    C
    quality
    D
    maintenance
    Read-only MCP server for Meta (Facebook) Graph API, enabling access to Marketing API, Pages, Instagram, and WhatsApp Business data through Claude Code and any MCP-compatible client.
    30
    7 npm
    1
    MIT