Skip to main content
Glama

nonprofit-explorer-mcp-server

Get Nonprofit Filings

nonprofit_get_filings
Read-onlyIdempotent

All Form 990 filings for a tax-exempt org by EIN: year-by-year revenue, expenses, assets, liabilities, net assets, revenue breakdown, executive compensation, and source PDF links. Use for trend analysis, due diligence, and accessing primary 990 documents. The filing year (tax_prd_yr) is the fiscal year of the return — data lags 1–2 years; always cite the year. An organization that resolves but has filed no 990 returns an empty filings array with a notice, not an error. Also returns filings_pdf_only — older filings with a PDF but no extracted financial data. Data from ProPublica Nonprofit Explorer, sourced from IRS Form 990 filings.

Input Schema

NameRequiredDescriptionDefault
einYesEmployer Identification Number. Use nonprofit_search_organizations to resolve an org name to its EIN.

Output Schema

NameRequiredDescriptionDefault
einNoEmployer Identification Number as integer.
nameNoLegal org name per IRS.
errorNoPresent when the call failed. Absent on success.
noticeNoPresent when the organization resolved but Nonprofit Explorer holds no filing of any kind for it — names the org and why the filing history is empty. An empty filings array without this notice means the org has filings that carry a PDF but no extracted data; read filings_pdf_only.
filingsNoFilings with extracted financial data, sorted newest first.
data_sourceNoProPublica + IRS attribution text.
propublica_urlNoProPublica Nonprofit Explorer URL for this org.
filings_pdf_onlyNoOlder filings with a PDF but no extracted financial data.
total_filings_pdf_onlyNoCount of PDF-only filings (no extracted data).
total_filings_with_dataNoCount of filings with extracted financial data.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed12 schema fields changed
    • changedInput schema / properties / ein / description
      Previous value: -"Employer Identification Number. Use nonprofit_search to resolve an org name to its EIN."New value: +"Employer Identification Number. Use nonprofit_search_organizations to resolve an org name to its EIN."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `not_found`: The EIN does not correspond to a known organization in the Nonprofit Explorer database. `upstream_error`: ProPublica API returns a non-JSON body or network error. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `timeout`: A ProPublica API attempt expires before its response body finishes. `retry_deadline_exceeded`: The complete ProPublica API retry exchange exceeds its deadline. `not_found`: The EIN does not correspond to a known organization in the Nonprofit Explorer database. `upstream_error`: ProPublica API returns a non-JSON body or network error. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "not_found",
      -  "upstream_error"
      -]New value: +[
      +  "timeout",
      +  "retry_deadline_exceeded",
      +  "not_found",
      +  "upstream_error"
      +]
    • changedOutput schema / properties / filings / items / properties / contributions_and_grants / description
      Previous value: -"Total contributions and grants (totcntrbgfts). 990/990-EZ only; null for 990-PF."New value: +"Contributions and grants in USD: totcntrbgfts (990), totcntrbs (990-EZ), or grscontrgifts (990-PF). Null when not extracted."
    • addedOutput schema / properties / filings / items / properties / distributable_amount
      Added value: +{
      +  "description": "990-PF required distributable amount in USD, Part X line 7, distribamt. A payout requirement, not actual payments or a compliance measure. Null for other forms or when not extracted.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / filings / items / properties / fair_market_value_assets
      Added value: +{
      +  "description": "990-PF end-of-year fair-market-value assets in USD, header Item I, fairmrktvalamt. Null for other forms or when not extracted.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / filings / items / properties / grants_paid
      Added value: +{
      +  "description": "990-PF contributions, gifts, and grants paid in USD, Part I line 25 column (a), contrpdpbks. Null for other forms or when not extracted.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / filings / items / properties / investment_income / description
      Previous value: -"Investment income (invstmntinc). 990/990-EZ only; null for 990-PF."New value: +"Investment income in USD: invstmntinc (990), othrinvstinc (990-EZ), or intrstrvnue plus dividndsamt (990-PF Part I column (a), lines 3–4: savings interest plus dividends and securities interest; excludes capital gains, rents, and net investment income). PF requires both components; null when not extracted."
    • changedOutput schema / properties / filings / items / properties / net_assets / description
      Previous value: -"Net assets/fund balances (end of year) in USD. From totnetassetend. Null when not extracted."New value: +"Net assets/fund balances (end of year) in USD. From totnetassetend (990), totnetassetsend (990-EZ), or tfundnworth (990-PF). Null when not extracted."
    • addedOutput schema / properties / filings / items / properties / net_investment_income
      Added value: +{
      +  "description": "990-PF net investment income in USD, Part I line 27b, netinvstinc. Null for other forms or when not extracted.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / filings / items / properties / program_service_revenue / description
      Previous value: -"Program service revenue (totprgmrevnue). 990/990-EZ only; null for 990-PF."New value: +"Program service revenue in USD: totprgmrevnue (990) or prgmservrev (990-EZ). Not applicable for 990-PF."
    • changedOutput schema / properties / filings / items / required
      Previous value: -[
      -  "tax_prd_yr",
      -  "tax_prd",
      -  "form_type",
      -  "pdf_url",
      -  "updated",
      -  "total_revenue",
      -  "total_expenses",
      -  "total_assets",
      -  "total_liabilities",
      -  "net_assets",
      -  "contributions_and_grants",
      -  "program_service_revenue",
      -  "investment_income",
      -  "program_expense_ratio",
      -  "executive_compensation"
      -]New value: +[
      +  "tax_prd_yr",
      +  "tax_prd",
      +  "form_type",
      +  "pdf_url",
      +  "updated",
      +  "total_revenue",
      +  "total_expenses",
      +  "total_assets",
      +  "total_liabilities",
      +  "net_assets",
      +  "contributions_and_grants",
      +  "program_service_revenue",
      +  "investment_income",
      +  "grants_paid",
      +  "distributable_amount",
      +  "fair_market_value_assets",
      +  "net_investment_income",
      +  "program_expense_ratio",
      +  "executive_compensation"
      +]
  2. Changed26 schema fields changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `not_found`: The EIN does not correspond to a known organization in the Nonprofit Explorer database `upstream_error`: ProPublica API returns a non-JSON body or network error Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `not_found`: The EIN does not correspond to a known organization in the Nonprofit Explorer database. `upstream_error`: ProPublica API returns a non-JSON body or network error. Other values are possible when a failure originates below the handler."
    • removedOutput schema / properties / filings / items / properties / contributions_and_grants / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / filings / items / properties / contributions_and_grants / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / filings / items / properties / executive_compensation / properties / amount / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / filings / items / properties / executive_compensation / properties / amount / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / filings / items / properties / investment_income / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / filings / items / properties / investment_income / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / filings / items / properties / net_assets / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / filings / items / properties / net_assets / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / filings / items / properties / pdf_url / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / filings / items / properties / pdf_url / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / filings / items / properties / program_expense_ratio / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "fundraising_expenses": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Professional fundraising fees (profndraising) in USD. Null when not reported."
      -      },
      -      "management_compensation": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Officer/director/trustee compensation (compnsatncurrofcr) in USD. Null when not reported."
      -      },
      -      "note": {
      -        "description": "Methodology note naming the source of the functional allocation.",
      -        "type": "string"
      -      },
      -      "other_salaries": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Other salaries and wages (othrsalwages) in USD. Null when not reported."
      -      },
      -      "program_expenses": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Program-service expenses in USD — Form 990 Part IX column (B), line 25."
      -      },
      -      "ratio": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Program-service expenses divided by total functional expenses, as a decimal 0.0–1.0. Always null against the current data source, which reports no program-service expense total."
      -      },
      -      "total_expenses": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Total functional expenses in USD — Form 990 Part IX column (A). From totfuncexpns."
      -      }
      -    },
      -    "required": [
      -      "ratio",
      -      "program_expenses",
      -      "total_expenses",
      -      "management_compensation",
      -      "other_salaries",
      -      "fundraising_expenses",
      -      "note"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "fundraising_expenses": {
      +        "description": "Professional fundraising fees (profndraising) in USD. Null when not reported.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "management_compensation": {
      +        "description": "Officer/director/trustee compensation (compnsatncurrofcr) in USD. Null when not reported.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "note": {
      +        "description": "Methodology note naming the source of the functional allocation.",
      +        "type": "string"
      +      },
      +      "other_salaries": {
      +        "description": "Other salaries and wages (othrsalwages) in USD. Null when not reported.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "program_expenses": {
      +        "description": "Program-service expenses in USD — Form 990 Part IX column (B), line 25.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "ratio": {
      +        "description": "Program-service expenses divided by total functional expenses, as a decimal 0.0–1.0. Always null against the current data source, which reports no program-service expense total.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "total_expenses": {
      +        "description": "Total functional expenses in USD — Form 990 Part IX column (A). From totfuncexpns.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "ratio",
      +      "program_expenses",
      +      "total_expenses",
      +      "management_compensation",
      +      "other_salaries",
      +      "fundraising_expenses",
      +      "note"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / filings / items / properties / program_service_revenue / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / filings / items / properties / program_service_revenue / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / filings / items / properties / total_assets / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / filings / items / properties / total_assets / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / filings / items / properties / total_expenses / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / filings / items / properties / total_expenses / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / filings / items / properties / total_liabilities / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / filings / items / properties / total_liabilities / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / filings / items / properties / total_revenue / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / filings / items / properties / total_revenue / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / filings / items / properties / updated / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / filings / items / properties / updated / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / filings_pdf_only / items / properties / pdf_url / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / filings_pdf_only / items / properties / pdf_url / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  3. Changed6 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "ein",
      +      "name",
      +      "filings",
      +      "filings_pdf_only",
      +      "total_filings_with_data",
      +      "total_filings_pdf_only",
      +      "data_source",
      +      "propublica_url"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `not_found`: The EIN does not correspond to a known organization in the Nonprofit Explorer database `upstream_error`: ProPublica API returns a non-JSON body or network error Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "not_found",
      +            "upstream_error"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "ein",
      -  "name",
      -  "filings",
      -  "filings_pdf_only",
      -  "total_filings_with_data",
      -  "total_filings_pdf_only",
      -  "data_source",
      -  "propublica_url"
      -]
  4. Changed5 schema fields changed
    • addedOutput schema / properties / filings / items / properties / executive_compensation / additionalProperties
      Added value: +false
    • removedOutput schema / properties / filings / items / properties / executive_compensation / anyOf
      Removed value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "amount": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Total executive compensation in USD. Null when not reported."
      -      },
      -      "field_name": {
      -        "description": "Source API field name for transparency (compnsatncurrofcr or compofficers).",
      -        "type": "string"
      -      },
      -      "form_type": {
      -        "description": "Form type this compensation field is sourced from.",
      -        "type": "string"
      -      },
      -      "note": {
      -        "description": "Plain-English description of what this field covers and where to find per-officer detail.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "amount",
      -      "field_name",
      -      "form_type",
      -      "note"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / filings / items / properties / executive_compensation / properties
      Added value: +{
      +  "amount": {
      +    "anyOf": [
      +      {
      +        "type": "number"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "description": "Total executive compensation in USD. Null when not reported."
      +  },
      +  "field_name": {
      +    "description": "Source API field the amount was read from — compnsatncurrofcr on 990 and 990-EZ, compofficers on 990-PF.",
      +    "enum": [
      +      "compnsatncurrofcr",
      +      "compofficers"
      +    ],
      +    "type": "string"
      +  },
      +  "form_type": {
      +    "description": "Form type this compensation field is sourced from.",
      +    "enum": [
      +      "990",
      +      "990-EZ",
      +      "990-PF"
      +    ],
      +    "type": "string"
      +  },
      +  "note": {
      +    "description": "Plain-English description of what this field covers and where to find per-officer detail.",
      +    "type": "string"
      +  }
      +}
    • addedOutput schema / properties / filings / items / properties / executive_compensation / required
      Added value: +[
      +  "amount",
      +  "field_name",
      +  "form_type",
      +  "note"
      +]
    • addedOutput schema / properties / filings / items / properties / executive_compensation / type
      Added value: +"object"
  5. Changed3 schema fields changed
    • changedOutput schema / properties / filings / items / properties / program_expense_ratio / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "fundraising_expenses": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Professional fundraising fees (profndraising) in USD. Null when not reported."
      -      },
      -      "management_compensation": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Officer/director/trustee compensation (compnsatncurrofcr) in USD. Null when not reported."
      -      },
      -      "note": {
      -        "description": "Methodology note explaining the computation and its limitations.",
      -        "type": "string"
      -      },
      -      "other_salaries": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Other salaries and wages (othrsalwages) in USD. Null when not reported."
      -      },
      -      "program_expenses": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Computed program expenses (total − officer comp − other wages − fundraising) in USD."
      -      },
      -      "ratio": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Program expense ratio as decimal 0.0–1.0. Null if inputs insufficient."
      -      },
      -      "total_expenses": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Total functional expenses (denominator) in USD. From totfuncexpns."
      -      }
      -    },
      -    "required": [
      -      "ratio",
      -      "program_expenses",
      -      "total_expenses",
      -      "management_compensation",
      -      "other_salaries",
      -      "fundraising_expenses",
      -      "note"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "fundraising_expenses": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Professional fundraising fees (profndraising) in USD. Null when not reported."
      +      },
      +      "management_compensation": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Officer/director/trustee compensation (compnsatncurrofcr) in USD. Null when not reported."
      +      },
      +      "note": {
      +        "description": "Methodology note naming the source of the functional allocation.",
      +        "type": "string"
      +      },
      +      "other_salaries": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Other salaries and wages (othrsalwages) in USD. Null when not reported."
      +      },
      +      "program_expenses": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Program-service expenses in USD — Form 990 Part IX column (B), line 25."
      +      },
      +      "ratio": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Program-service expenses divided by total functional expenses, as a decimal 0.0–1.0. Always null against the current data source, which reports no program-service expense total."
      +      },
      +      "total_expenses": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Total functional expenses in USD — Form 990 Part IX column (A). From totfuncexpns."
      +      }
      +    },
      +    "required": [
      +      "ratio",
      +      "program_expenses",
      +      "total_expenses",
      +      "management_compensation",
      +      "other_salaries",
      +      "fundraising_expenses",
      +      "note"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / filings / items / properties / program_expense_ratio / description
      Previous value: -"Program-expense ratio with inputs. Null for 990-PF (different field set). Approximation — consult the source PDF for the full expense schedule."New value: +"Always null against the current data source. ProPublica returns no Form 990 Part IX column (B) program-service expense total, and the functional allocation across program, management, and fundraising cannot be reconstructed from the fields it does return. Read Part IX of the filing at pdf_url for the split."
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Present when the organization resolved but Nonprofit Explorer holds no filing of any kind for it — names the org and why the filing history is empty. An empty filings array without this notice means the org has filings that carry a PDF but no extracted data; read filings_pdf_only.",
      +  "type": "string"
      +}
  6. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations: discloses the reporting lag and citation requirement, that an org with no filings returns an empty array plus a notice rather than an error, the existence of a separate filings_pdf_only bucket, and the upstream data source (ProPublica/IRS). These are exactly the operational facts an agent needs before interpreting 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?

Front-loads what is returned, then layers usage, caveats, and edge cases in a tight sequence with no filler. It is on the dense side (five distinct claims) but nearly every sentence carries decision-relevant information.

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?

Even though an output schema exists, the description supplies the interpretive context the schema cannot: the fiscal-year meaning, the lag, the empty-result semantics, and the PDF-only bucket. Nothing needed to call or interpret the tool 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?

Only one parameter, and the schema already documents both integer and hyphenated string forms of EIN plus the search-tool routing hint at 100% coverage. The description adds no further constraint on the parameter itself (its 'filing year' discussion concerns returned fields, not inputs), 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+resource ('All Form 990 filings for a tax-exempt org by EIN') and enumerates the returned content precisely (revenue, expenses, assets, liabilities, net assets, exec comp, PDF links). This is clearly distinguishable from nonprofit_search_organizations (name→EIN lookup) and nonprofit_get_organization (profile data).

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

Usage Guidelines4/5

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

Gives concrete usage contexts ('trend analysis, due diligence, and accessing primary 990 documents') and flags the 1–2 year data lag with an instruction to cite the year. It does not explicitly say when to prefer nonprofit_get_organization instead, but the intended role of this sibling is unambiguous from the content listed.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.