Skip to main content
Glama

nonprofit-explorer-mcp-server

Get Nonprofit Organization

nonprofit_get_organization
Read-onlyIdempotent

Full profile for a single tax-exempt org by EIN: legal name, address, NTEE classification, 501(c) type, IRS ruling date, and a financial snapshot from the most recent Form 990 filing (revenue, expenses, assets, net assets, and the source PDF link). Also returns the IRS Business Master File standing — whether contributions are deductible, exemption status, and public-charity vs. private-foundation classification. Use nonprofit_search_organizations first if you only have an org name — this tool requires an EIN. Data lags 1–2 years; the tax year is shown prominently. Data from ProPublica Nonprofit Explorer, sourced from IRS Form 990 filings.

Input Schema

NameRequiredDescriptionDefault
einYesEmployer Identification Number. Accepts integer (530196605) or string with optional hyphen ("53-0196605"). Obtain from nonprofit_search_organizations results.

Output Schema

NameRequiredDescriptionDefault
einNoEmployer Identification Number as integer.
cityNoCity. Null when not on record.
nameNoLegal org name per IRS.
errorNoPresent when the call failed. Absent on success.
stateNoTwo-letter state abbreviation. Null when not on record.
streinNoEIN in "XX-XXXXXXX" format.
addressNoStreet address. Null when not on record.
zipcodeNoZIP code. Null when not on record.
ntee_codeNoFull NTEE code (e.g., "E210" = hospital). Null when unclassified.
sort_nameNoIRS Business Master File secondary name line (SORT_NAME) — an internal sort key such as a division or service-center label, not an alternate organization name. Null for most orgs.
deductibleNoWhether contributions to this org are tax-deductible, as "<IRS code> — <meaning>". Three states, not two: code 1 deductible, code 2 not deductible, code 4 deductible by treaty (foreign orgs). Null when the IRS Business Master File records no deductibility code.
data_sourceNoProPublica + IRS attribution text.
ruling_dateNoISO date of IRS recognition (e.g., "1946-07"). Null when not on record.
asset_amountNoMost recent IRS BMF total assets in USD. Null when not on record.
filing_countNoTotal filings with extracted data on record.
exempt_statusNoIRS exemption status as "<IRS code> — <meaning>"; code 1 is an unconditional exemption. This records what the IRS granted, not whether the exemption is still in force — the Business Master File is a lagging snapshot and automatic revocations are published separately. Null when the Business Master File records no status code.
income_amountNoMost recent IRS BMF total income in USD. Null when not on record.
latest_filingNoFinancial snapshot from the most recent Form 990. Null if no filings_with_data are available.
bmf_tax_periodNoTax period of the latest return recorded in the IRS Business Master File (e.g. "2025-06-01"). Often more recent than latest_filing.tax_prd_yr, which reflects the newest 990 ProPublica has extracted. Null when not on record.
propublica_urlNoProPublica Nonprofit Explorer URL for this org.
revenue_amountNoMost recent IRS BMF total revenue in USD. Null when not on record.
foundation_typeNoIRS foundation classification as "<IRS code> — <meaning>", separating public charities (codes 10–25) from private foundations (codes 2–4). Codes 0 (all organizations except 501(c)(3)) and 9 (suspense) fall outside both groups. Null when the IRS Business Master File records no foundation code.
subsection_codeNo501(c) subsection number (e.g., 3 = charitable organization, covering both public charities and private foundations — see foundation_type to tell them apart). Null when not classified.
filing_count_pdf_onlyNoTotal PDF-only filings without extracted financial data. Use nonprofit_get_filings for their PDF links.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • changedInput schema / properties / ein / description
      Previous value: -"Employer Identification Number. Accepts integer (530196605) or string with optional hyphen (\"53-0196605\"). Obtain from nonprofit_search results."New value: +"Employer Identification Number. Accepts integer (530196605) or string with optional hyphen (\"53-0196605\"). Obtain from nonprofit_search_organizations results."
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "not": {
      -      "required": [
      -        "error"
      -      ]
      -    },
      -    "required": [
      -      "ein",
      -      "strein",
      -      "name",
      -      "sort_name",
      -      "address",
      -      "city",
      -      "state",
      -      "zipcode",
      -      "ntee_code",
      -      "subsection_code",
      -      "ruling_date",
      -      "asset_amount",
      -      "income_amount",
      -      "revenue_amount",
      -      "deductible",
      -      "exempt_status",
      -      "foundation_type",
      -      "bmf_tax_period",
      -      "latest_filing",
      -      "filing_count",
      -      "data_source",
      -      "propublica_url"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "error"
      -    ]
      -  }
      -]New value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "ein",
      +      "strein",
      +      "name",
      +      "sort_name",
      +      "address",
      +      "city",
      +      "state",
      +      "zipcode",
      +      "ntee_code",
      +      "subsection_code",
      +      "ruling_date",
      +      "asset_amount",
      +      "income_amount",
      +      "revenue_amount",
      +      "deductible",
      +      "exempt_status",
      +      "foundation_type",
      +      "bmf_tax_period",
      +      "latest_filing",
      +      "filing_count",
      +      "filing_count_pdf_only",
      +      "data_source",
      +      "propublica_url"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • 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 (HTML 500) 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 (HTML 500) 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"
      +]
    • addedOutput schema / properties / filing_count_pdf_only
      Added value: +{
      +  "description": "Total PDF-only filings without extracted financial data. Use nonprofit_get_filings for their PDF links.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / latest_filing / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "form_type": {
      -        "description": "IRS form type filed.",
      -        "enum": [
      -          "990",
      -          "990-EZ",
      -          "990-PF"
      -        ],
      -        "type": "string"
      -      },
      -      "net_assets": {
      -        "description": "Net assets/fund balances (end of year) in USD. From totnetassetend. Null when not extracted.",
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "pdf_url": {
      -        "description": "Source Form 990 PDF link. Null for some IRS processing batches — check filings via nonprofit_get_filings.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "tax_prd_yr": {
      -        "description": "Fiscal year of this filing (e.g., 2023). NOT the current year — data lags 1–2 years.",
      -        "type": "number"
      -      },
      -      "total_assets": {
      -        "description": "Total assets (end of year) in USD. Null when not extracted.",
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "total_expenses": {
      -        "description": "Total expenses in USD. Null when not extracted.",
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "total_liabilities": {
      -        "description": "Total liabilities (end of year) in USD. Null when not extracted.",
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "total_revenue": {
      -        "description": "Total revenue in USD. Null when not extracted.",
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "tax_prd_yr",
      -      "form_type",
      -      "total_revenue",
      -      "total_expenses",
      -      "total_assets",
      -      "total_liabilities",
      -      "net_assets",
      -      "pdf_url"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "form_type": {
      +        "description": "IRS form type filed.",
      +        "enum": [
      +          "990",
      +          "990-EZ",
      +          "990-PF"
      +        ],
      +        "type": "string"
      +      },
      +      "net_assets": {
      +        "description": "Net assets/fund balances (end of year) in USD. From totnetassetend (990), totnetassetsend (990-EZ), or tfundnworth (990-PF). Null when not extracted.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "pdf_url": {
      +        "description": "Source Form 990 PDF link. Null for some IRS processing batches — check filings via nonprofit_get_filings.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "tax_prd_yr": {
      +        "description": "Fiscal year of this filing (e.g., 2023). NOT the current year — data lags 1–2 years.",
      +        "type": "number"
      +      },
      +      "total_assets": {
      +        "description": "Total assets (end of year) in USD. Null when not extracted.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "total_expenses": {
      +        "description": "Total expenses in USD. Null when not extracted.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "total_liabilities": {
      +        "description": "Total liabilities (end of year) in USD. Null when not extracted.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "total_revenue": {
      +        "description": "Total revenue in USD. Null when not extracted.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "tax_prd_yr",
      +      "form_type",
      +      "total_revenue",
      +      "total_expenses",
      +      "total_assets",
      +      "total_liabilities",
      +      "net_assets",
      +      "pdf_url"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  2. Changed32 schema fields changed
    • removedOutput schema / properties / address / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / address / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / asset_amount / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / asset_amount / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / bmf_tax_period / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / bmf_tax_period / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / city / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / city / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / deductible / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / deductible / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • 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 (HTML 500) 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 (HTML 500) or network error. Other values are possible when a failure originates below the handler."
    • removedOutput schema / properties / exempt_status / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / exempt_status / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / foundation_type / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / foundation_type / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / income_amount / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / income_amount / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / latest_filing / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "form_type": {
      -        "description": "IRS form type filed.",
      -        "enum": [
      -          "990",
      -          "990-EZ",
      -          "990-PF"
      -        ],
      -        "type": "string"
      -      },
      -      "net_assets": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Net assets/fund balances (end of year) in USD. From totnetassetend. Null when not extracted."
      -      },
      -      "pdf_url": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Source Form 990 PDF link. Null for some IRS processing batches — check filings via nonprofit_get_filings."
      -      },
      -      "tax_prd_yr": {
      -        "description": "Fiscal year of this filing (e.g., 2023). NOT the current year — data lags 1–2 years.",
      -        "type": "number"
      -      },
      -      "total_assets": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Total assets (end of year) in USD. Null when not extracted."
      -      },
      -      "total_expenses": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Total expenses in USD. Null when not extracted."
      -      },
      -      "total_liabilities": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Total liabilities (end of year) in USD. Null when not extracted."
      -      },
      -      "total_revenue": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Total revenue in USD. Null when not extracted."
      -      }
      -    },
      -    "required": [
      -      "tax_prd_yr",
      -      "form_type",
      -      "total_revenue",
      -      "total_expenses",
      -      "total_assets",
      -      "total_liabilities",
      -      "net_assets",
      -      "pdf_url"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "form_type": {
      +        "description": "IRS form type filed.",
      +        "enum": [
      +          "990",
      +          "990-EZ",
      +          "990-PF"
      +        ],
      +        "type": "string"
      +      },
      +      "net_assets": {
      +        "description": "Net assets/fund balances (end of year) in USD. From totnetassetend. Null when not extracted.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "pdf_url": {
      +        "description": "Source Form 990 PDF link. Null for some IRS processing batches — check filings via nonprofit_get_filings.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "tax_prd_yr": {
      +        "description": "Fiscal year of this filing (e.g., 2023). NOT the current year — data lags 1–2 years.",
      +        "type": "number"
      +      },
      +      "total_assets": {
      +        "description": "Total assets (end of year) in USD. Null when not extracted.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "total_expenses": {
      +        "description": "Total expenses in USD. Null when not extracted.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "total_liabilities": {
      +        "description": "Total liabilities (end of year) in USD. Null when not extracted.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "total_revenue": {
      +        "description": "Total revenue in USD. Null when not extracted.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "tax_prd_yr",
      +      "form_type",
      +      "total_revenue",
      +      "total_expenses",
      +      "total_assets",
      +      "total_liabilities",
      +      "net_assets",
      +      "pdf_url"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / ntee_code / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / ntee_code / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / revenue_amount / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / revenue_amount / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / ruling_date / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / ruling_date / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / sort_name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / sort_name / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / state / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / state / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / subsection_code / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / subsection_code / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / zipcode / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / zipcode / 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",
      +      "strein",
      +      "name",
      +      "sort_name",
      +      "address",
      +      "city",
      +      "state",
      +      "zipcode",
      +      "ntee_code",
      +      "subsection_code",
      +      "ruling_date",
      +      "asset_amount",
      +      "income_amount",
      +      "revenue_amount",
      +      "deductible",
      +      "exempt_status",
      +      "foundation_type",
      +      "bmf_tax_period",
      +      "latest_filing",
      +      "filing_count",
      +      "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 (HTML 500) 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",
      -  "strein",
      -  "name",
      -  "sort_name",
      -  "address",
      -  "city",
      -  "state",
      -  "zipcode",
      -  "ntee_code",
      -  "subsection_code",
      -  "ruling_date",
      -  "asset_amount",
      -  "income_amount",
      -  "revenue_amount",
      -  "deductible",
      -  "exempt_status",
      -  "foundation_type",
      -  "bmf_tax_period",
      -  "latest_filing",
      -  "filing_count",
      -  "data_source",
      -  "propublica_url"
      -]
  4. Changed10 schema fields changed
    • changedOutput schema / properties / asset_amount / description
      Previous value: -"Most recent IRS BMF total assets in USD. Null when not reported."New value: +"Most recent IRS BMF total assets in USD. Null when not on record."
    • addedOutput schema / properties / bmf_tax_period
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Tax period of the latest return recorded in the IRS Business Master File (e.g. \"2025-06-01\"). Often more recent than latest_filing.tax_prd_yr, which reflects the newest 990 ProPublica has extracted. Null when not on record."
      +}
    • addedOutput schema / properties / deductible
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Whether contributions to this org are tax-deductible, as \"<IRS code> — <meaning>\". Three states, not two: code 1 deductible, code 2 not deductible, code 4 deductible by treaty (foreign orgs). Null when the IRS Business Master File records no deductibility code."
      +}
    • addedOutput schema / properties / exempt_status
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "IRS exemption status as \"<IRS code> — <meaning>\"; code 1 is an unconditional exemption. This records what the IRS granted, not whether the exemption is still in force — the Business Master File is a lagging snapshot and automatic revocations are published separately. Null when the Business Master File records no status code."
      +}
    • addedOutput schema / properties / foundation_type
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "IRS foundation classification as \"<IRS code> — <meaning>\", separating public charities (codes 10–25) from private foundations (codes 2–4). Codes 0 (all organizations except 501(c)(3)) and 9 (suspense) fall outside both groups. Null when the IRS Business Master File records no foundation code."
      +}
    • changedOutput schema / properties / income_amount / description
      Previous value: -"Most recent IRS BMF total income in USD. Null when not reported."New value: +"Most recent IRS BMF total income in USD. Null when not on record."
    • changedOutput schema / properties / revenue_amount / description
      Previous value: -"Most recent IRS BMF total revenue in USD. Null when not reported."New value: +"Most recent IRS BMF total revenue in USD. Null when not on record."
    • changedOutput schema / properties / sort_name / description
      Previous value: -"Alternate or subtitle name from the org record. Null when absent."New value: +"IRS Business Master File secondary name line (SORT_NAME) — an internal sort key such as a division or service-center label, not an alternate organization name. Null for most orgs."
    • changedOutput schema / properties / subsection_code / description
      Previous value: -"501(c) subsection number (e.g., 3 = public charity). Null when not classified."New value: +"501(c) subsection number (e.g., 3 = charitable organization, covering both public charities and private foundations — see foundation_type to tell them apart). Null when not classified."
    • changedOutput schema / required
      Previous value: -[
      -  "ein",
      -  "strein",
      -  "name",
      -  "sort_name",
      -  "address",
      -  "city",
      -  "state",
      -  "zipcode",
      -  "ntee_code",
      -  "subsection_code",
      -  "ruling_date",
      -  "asset_amount",
      -  "income_amount",
      -  "revenue_amount",
      -  "latest_filing",
      -  "filing_count",
      -  "data_source",
      -  "propublica_url"
      -]New value: +[
      +  "ein",
      +  "strein",
      +  "name",
      +  "sort_name",
      +  "address",
      +  "city",
      +  "state",
      +  "zipcode",
      +  "ntee_code",
      +  "subsection_code",
      +  "ruling_date",
      +  "asset_amount",
      +  "income_amount",
      +  "revenue_amount",
      +  "deductible",
      +  "exempt_status",
      +  "foundation_type",
      +  "bmf_tax_period",
      +  "latest_filing",
      +  "filing_count",
      +  "data_source",
      +  "propublica_url"
      +]
  5. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, and the description adds real value beyond them: a 1–2 year data lag, a prominent tax year field to disambiguate recency, and provenance (ProPublica Nonprofit Explorer / IRS Form 990). It does not cover failure behavior for an unknown or invalid EIN, which keeps it short of a 5.

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

Conciseness4/5

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

Front-loaded with the core purpose, then scope, then the sibling routing rule, then caveats. The parenthetical enumeration of financial fields is the longest clause and is partially redundant with the output schema, but it still aids tool selection. No filler sentences.

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?

With an output schema present, the description needn't specify return shape, yet it still signals the two data sources (Form 990 vs. BMF) an agent will be reading. Combined with the staleness caveat and the EIN precondition, an agent has everything needed to call it 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 coverage is 100% and the schema itself documents both integer and hyphenated-string EIN forms plus the leading-zero caveat. The description only adds the requirement and the origin of the value ('Obtain from nonprofit_search_organizations results'), which is useful but no deeper than the schema. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Full profile for a single tax-exempt org by EIN') and enumerates exactly what is returned: legal name, address, NTEE, 501(c) type, ruling date, Form 990 financials, and BMF standing. This is clearly distinguishable from nonprofit_get_filings and nonprofit_search_organizations.

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

Usage Guidelines5/5

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

Names the alternative explicitly and the condition that selects it: 'Use nonprofit_search_organizations first if you only have an org name — this tool requires an EIN.' The hard prerequisite (EIN required) is stated outright, so an agent cannot mis-invoke it with a name.

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.