# io.usefulapi/little-green-light (remote · little-green-light.usefulapi.io)

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

- Trust score: 75/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-04

## Components

- remote · `little-green-light.usefulapi.io`: 75/100 (this document), [markdown](https://verifymcp.io/servers/io-usefulapi-little-green-light/little-green-light.md), [page](https://verifymcp.io/servers/io-usefulapi-little-green-light/little-green-light)

## Channel facts

- Endpoint: `https://little-green-light.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-04.

- **Endpoint Security**: 89/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 67/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 3761 tokens (~188/item across 20 items; 20 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 13/100
  - Stability observed for 4 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 92/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 76% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 20 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 20 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### How do I install the io.usefulapi/little-green-light MCP server?

io.usefulapi/little-green-light is a hosted endpoint at https://little-green-light.usefulapi.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http io-usefulapi-little-green-light 'https://little-green-light.usefulapi.io/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "io-usefulapi-little-green-light": {
      "url": "https://little-green-light.usefulapi.io/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "io-usefulapi-little-green-light": {
      "type": "http",
      "url": "https://little-green-light.usefulapi.io/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.io-usefulapi-little-green-light]
url = "https://little-green-light.usefulapi.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-usefulapi-little-green-light": {
      "type": "remote",
      "url": "https://little-green-light.usefulapi.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-usefulapi-little-green-light --url 'https://little-green-light.usefulapi.io/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-usefulapi-little-green-light:
    url: "https://little-green-light.usefulapi.io/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "io-usefulapi-little-green-light": {
      "Transport": "http",
      "Url": "https://little-green-light.usefulapi.io/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add io-usefulapi-little-green-light -t streamable-http -u 'https://little-green-light.usefulapi.io/mcp'
```

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-little-green-light": {
      "type": "http",
      "url": "https://little-green-light.usefulapi.io/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-03 (score 75, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-02 (score 74, 0)

- [functional] Server version: 1.3.0 → 1.5.1

### 2026-10-01 (score 74, +5)

- [security improvement] HTTPS: unverified → pass
- [functional improvement] Stability: unverified → 0.03
- [functional] Server version: 1.0.0 → 1.3.0

### 2026-09-30 (score 69, +51)

- [security improvement] Authorization: unverified → pass
- [security improvement] Injection markers: unverified → pass
- [security improvement] Transport: fail → pass
- [security] First check of Judged manipulation: pass
- [security] First check of Authorization: partial
- [functional regression] MCP protocol: unverified → fail
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: excellent
- [functional] First check of Destructive annotations: pass
- [functional] First check of Schema quality: fail
- [functional] First check of Tool coverage: 76

### 2026-09-29 (score 18)

First indexed and scored.

## MCP tools (20)

### `lgl_search_constituents` (~347 tokens)

Search constituents

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.

Input parameters:

- `email` (string): Email address contains this.
- `expand` (array): Related records to include inline on each constituent.
- `limit` (integer): Number of entries to return, 1-100. LGL's default is 25.
- `name` (string): Any name field contains this.
- `offset` (integer): Start at this entry (0-based). Use the previous page's next_item. Default 0.
- `sort` (string): Sort by name, external_id, lgl_id, date_created, date_updated, membership_level or membership_end_date_from. Append '!' to reverse (e.g. date_updated!).
- `terms` (array): Extra raw LGL search terms, each 'field=value' (combined with AND). See the tool description for the available fields.

### `lgl_get_constituent` (~69 tokens)

Get a constituent

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

Input parameters:

- `id` (integer, required): Constituent id (integer).

### `lgl_list_constituent_gifts` (~126 tokens)

List a constituent's gifts

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.

Input parameters:

- `constituent_id` (integer, required): Constituent id (integer).
- `limit` (integer): Number of entries to return, 1-100. LGL's default is 25.
- `offset` (integer): Start at this entry (0-based). Use the previous page's next_item. Default 0.

### `lgl_search_gifts` (~417 tokens)

Search gifts

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.

Input parameters:

- `date_from` (string): Gift date from (YYYY-MM-DD).
- `date_to` (string): Gift date to (YYYY-MM-DD).
- `expand` (array): Donor fields to include inline on each gift.
- `limit` (integer): Number of entries to return, 1-100. LGL's default is 25.
- `offset` (integer): Start at this entry (0-based). Use the previous page's next_item. Default 0.
- `sort` (string): Sort by name, gift_amount, date, date_created, date_updated, fund, appeal, campaign or gift_type. Append '!' to reverse (e.g. date!).
- `terms` (array): Extra raw LGL search terms, each 'field=value' (combined with AND). See the tool description for the available fields.
- `updated_from` (string): Updated from (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ).
- `updated_to` (string): Updated to (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ).

### `lgl_get_gift` (~69 tokens)

Get a gift

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

Input parameters:

- `id` (integer, required): Gift id (integer).

### `lgl_list_constituent_notes` (~110 tokens)

List a constituent's notes

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

Input parameters:

- `constituent_id` (integer, required): Constituent id (integer).
- `limit` (integer): Number of entries to return, 1-100. LGL's default is 25.
- `offset` (integer): Start at this entry (0-based). Use the previous page's next_item. Default 0.

### `lgl_list_constituent_contact_reports` (~123 tokens)

List a constituent's contact reports

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.

Input parameters:

- `constituent_id` (integer, required): Constituent id (integer).
- `limit` (integer): Number of entries to return, 1-100. LGL's default is 25.
- `offset` (integer): Start at this entry (0-based). Use the previous page's next_item. Default 0.

### `lgl_list_constituent_memberships` (~124 tokens)

List a constituent's memberships

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.

Input parameters:

- `constituent_id` (integer, required): Constituent id (integer).
- `limit` (integer): Number of entries to return, 1-100. LGL's default is 25.
- `offset` (integer): Start at this entry (0-based). Use the previous page's next_item. Default 0.

### `lgl_list_appeals` (~111 tokens)

List appeals

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.

Input parameters:

- `limit` (integer): Number of entries to return, 1-100. LGL's default is 25.
- `offset` (integer): Start at this entry (0-based). Use the previous page's next_item. Default 0.

### `lgl_list_campaigns` (~101 tokens)

List campaigns

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.

Input parameters:

- `limit` (integer): Number of entries to return, 1-100. LGL's default is 25.
- `offset` (integer): Start at this entry (0-based). Use the previous page's next_item. Default 0.

### `lgl_list_funds` (~103 tokens)

List funds

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.

Input parameters:

- `limit` (integer): Number of entries to return, 1-100. LGL's default is 25.
- `offset` (integer): Start at this entry (0-based). Use the previous page's next_item. Default 0.

### `lgl_list_events` (~106 tokens)

List events

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.

Input parameters:

- `limit` (integer): Number of entries to return, 1-100. LGL's default is 25.
- `offset` (integer): Start at this entry (0-based). Use the previous page's next_item. Default 0.

### `lgl_list_groups` (~103 tokens)

List groups

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.

Input parameters:

- `limit` (integer): Number of entries to return, 1-100. LGL's default is 25.
- `offset` (integer): Start at this entry (0-based). Use the previous page's next_item. Default 0.

### `lgl_list_team_members` (~114 tokens)

List team members

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.

Input parameters:

- `limit` (integer): Number of entries to return, 1-100. LGL's default is 25.
- `offset` (integer): Start at this entry (0-based). Use the previous page's next_item. Default 0.

### `lgl_list_type_values` (~197 tokens)

List lookup values

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

Input parameters:

- `gift_type_id` (integer): Only for type=gift_categories: restrict to one gift type.
- `limit` (integer): Number of entries to return, 1-100. LGL's default is 25.
- `offset` (integer): Start at this entry (0-based). Use the previous page's next_item. Default 0.
- `type` (string, required): Which lookup to list.

### `lgl_create_constituent` (~370 tokens)

Create a constituent

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.

Input parameters:

- `addressee` (string): Addressee/label name.
- `annual_report_name` (string)
- `birthday` (string): Birthday (YYYY-MM-DD).
- `constituent_contact_type_name` (string): Constituent contact type name, e.g. 'Primary'.
- `deceased_date` (string): Deceased date.
- `email_addresses` (array): Email addresses to add.
- `external_constituent_id` (string): External constituent ID (your own system's id).
- `first_name` (string, required): First name.
- `gender` (string)
- `groups` (array): Group memberships to add.
- `is_anon` (boolean): Gives anonymously?
- `is_deceased` (boolean)
- `is_org` (boolean): True if this constituent is an organization or company.
- `job_title` (string)
- `last_name` (string, required): Last name.
- `maiden_name` (string)
- `middle_name` (string)
- `nick_name` (string)
- `org_name` (string): Organization name.
- `phone_numbers` (array): Phone numbers to add.
- `prefix` (string): Prefix, e.g. 'Dr.'.
- `salutation` (string)
- `spouse_name` (string): Spouse/partner name.
- `street_addresses` (array): Street addresses to add.
- `suffix` (string)

### `lgl_update_constituent` (~371 tokens)

Update a constituent

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

Input parameters:

- `addressee` (string): Addressee/label name.
- `annual_report_name` (string)
- `birthday` (string): Birthday (YYYY-MM-DD).
- `constituent_contact_type_name` (string): Constituent contact type name, e.g. 'Primary'.
- `deceased_date` (string): Deceased date.
- `external_constituent_id` (string): External constituent ID (your own system's id).
- `first_name` (string, required): First name (required by LGL even when unchanged).
- `gender` (string)
- `id` (integer, required): Constituent id (integer).
- `is_anon` (boolean): Gives anonymously?
- `is_deceased` (boolean)
- `is_org` (boolean): True if this constituent is an organization or company.
- `job_title` (string)
- `last_name` (string, required): Last name (required by LGL even when unchanged).
- `maiden_name` (string)
- `middle_name` (string)
- `nick_name` (string)
- `org_name` (string): Organization name.
- `prefix` (string): Prefix, e.g. 'Dr.'.
- `salutation` (string)
- `spouse_name` (string): Spouse/partner name.
- `suffix` (string)

### `lgl_create_gift` (~461 tokens)

Record a gift

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.

Input parameters:

- `ack_template_name` (string): Acknowledgment mailing template name, or 'do_not_ack'.
- `appeal_id` (integer)
- `appeal_name` (string)
- `campaign_id` (integer)
- `campaign_name` (string)
- `check_number` (string): Check/reference number.
- `constituent_id` (integer, required): Constituent id (integer).
- `deductible_amount` (number): Tax-deductible amount.
- `deposit_date` (string): Deposit date (YYYY-MM-DD).
- `deposited_amount` (number)
- `event_id` (integer)
- `event_name` (string)
- `external_id` (string): External gift id (your own system's id).
- `fund_id` (integer)
- `fund_name` (string)
- `gift_category_id` (integer)
- `gift_category_name` (string): Gift category name, e.g. 'Donation'.
- `gift_type_id` (integer): Gift type id.
- `gift_type_name` (string): Gift type name, e.g. 'Gift'.
- `is_anon` (boolean): Gift is anonymous.
- `note` (string): Gift note.
- `payment_type_id` (integer)
- `payment_type_name` (string): Payment type name, e.g. 'Check', 'Credit Card'.
- `received_amount` (number): Gift amount.
- `received_date` (string): Gift date (YYYY-MM-DD).
- `team_member` (string): Team member credited: id, email, or 'first_name last_name' (see lgl_list_team_members).

### `lgl_create_note` (~150 tokens)

Add a note

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.

Input parameters:

- `constituent_id` (integer, required): Constituent id (integer).
- `external_id` (string)
- `note_type_id` (integer)
- `note_type_name` (string): Note type name, e.g. 'General'.
- `original_date` (string, required): Date the note refers to (YYYY-MM-DD).
- `text` (string, required): Note text.

### `lgl_create_contact_report` (~189 tokens)

Log a contact report

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.

Input parameters:

- `constituent_id` (integer, required): Constituent id (integer).
- `contact_report_type_id` (integer)
- `contact_report_type_name` (string): Type name, e.g. 'Call', 'Email', 'Meeting'.
- `name` (string): Short title for the report.
- `original_date` (string): Date of the contact (YYYY-MM-DD).
- `team_member` (string): Team member who made contact: id, email, or 'first_name last_name'.
- `text` (string, required): What happened.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-usefulapi-little-green-light/little-green-light#diagnostics

## Score history

- 2026-10-04: 75
- 2026-10-03: 75
- 2026-10-02: 74
- 2026-10-01: 74
- 2026-09-30: 69
- 2026-09-29: 18

## Common questions

### What is the io.usefulapi/little-green-light MCP server?

io.usefulapi/little-green-light is an MCP server listed in the public MCP registry as io.usefulapi/little-green-light. Search Little Green Light donors, gifts, notes and memberships, and add gifts and contact reports. This page covers its hosted endpoint (https://little-green-light.usefulapi.io/mcp).

### Is the io.usefulapi/little-green-light MCP server safe to use?

io.usefulapi/little-green-light scores 75 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the io.usefulapi/little-green-light MCP server expose?

io.usefulapi/little-green-light exposes 20 tools: lgl_search_constituents, lgl_get_constituent, lgl_list_constituent_gifts, lgl_search_gifts, lgl_get_gift, and 15 more. Their descriptions and schemas cost roughly 3,761 tokens of context every time the server is loaded.

### Does the io.usefulapi/little-green-light MCP server require authentication?

Yes. io.usefulapi/little-green-light asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the io.usefulapi/little-green-light MCP server still maintained?

io.usefulapi/little-green-light is still listed as active in the MCP registry. We last reached this channel on 4 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://little-green-light.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-little-green-light/little-green-light.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-little-green-light/little-green-light.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-little-green-light/little-green-light
