---
canonical_url: "https://docs.composio.dev/toolkits/candid_mcp"
markdown_url: "https://docs.composio.dev/toolkits/candid_mcp.md"
product: "platform"
version: null
last_updated: null
---

# Candid MCP

Candid MCP lets agents research nonprofit organizations, funders, funding opportunities, social-sector knowledge, and related news using Candid data.

- **Category:** model context protocol
- **Auth:** DCR_OAUTH
- **Composio-managed OAuth available?** No
- **Tools:** 6
- **Triggers:** 0
- **Slug:** `CANDID_MCP`
- **Version:** 20260924_00

## Tools

### Current date

**Slug:** `CANDID_MCP_CURRENT_DATE`

Get the current day to reference for any time-sensitive data requests.

ALWAYS call this tool:
* At the beginning of conversations involving dates or timelines
* Before searching news or time-sensitive data
* When interpreting or presenting any temporal information (recent, upcoming, last year, etc.)
* Before making statements about when events occurred or will occur

Never assume the correct date.
If data only includes partial date information, use this tool to infer missing details.

Returns
-------
date
    Today's date

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `result` | string | Yes |  |

### Identify locations

**Slug:** `CANDID_MCP_IDENTIFY_LOCATIONS`

Uses natural language processing to find and match named geographies found in the supplied text. The output
will supply identified geographies from [Geonames](https://www.geonames.org/). These geographies can be used for
other Candid tools like organization search to get more specific results.

Key Usage Requirements:
- This tools is most effective when the input text is a full sentence or more and grammatically correct
- It uses a NLP model to resolve geographic names and then matches them using graph inferencing

Parameters
----------
text : str
    Text describing working in the social sector. This should be related to the social and/or philanthropic sector.

Examples
--------
>>> geo_detect(text='Homeless shelters in new york city')

Returns
-------
list[GeocodingRecord]
    Matched geographies responses. This is an array of data objects which contain the `name` of the geography as it
    appeared in the supplied text, and the best match to a Geonames geography. For many Candid knowledge tools the
    `geonames_id` value will be most useful.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `text` | string | Yes |  |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `result` | array | Yes |  |

### Identify mentioned organizations

**Slug:** `CANDID_MCP_IDENTIFY_MENTIONED_ORGANIZATIONS`

Resolve and link organization names to official Candid nonprofit profiles. Use after any response that mentions
nonprofit or foundation names to generate clickable profile links.

This uses the Candid Search in a lookup mode, and then finds the best result(s) using a heuristic string
similarity search.

This tool is focused on getting links to the organization's Candid profile for the user to click and explore in
more detail.

Use the URLs here to replace organization names in the chat response with links to the organization's profile. Links
to Candid profiles **MUST** be used to do the following:
1. Generate direct links to Candid organization profiles
2. Provide a mechanism for users to easily access detailed organizational information
3. Enhance responses with authoritative source links

Key Usage Requirements:
- This tool should be used after a knowledge resources result if organization names are mentioned
- This tool should be used after a web search if organization names are mentioned
- This tool should not be used after any Candid tool which returns a `profile_link` URL field
- Always incorporate returned profile URLs directly into the response text
- Replace organization name mentions with hyperlinked Candid profile URLs
- Prioritize creating a seamless user experience by making URLs contextually relevant

Example Desired Output:
Instead of: 'The Gates Foundation does impressive work.'
Use: 'The [Gates Foundation](https://app.candid.org/profile/XXXXX) does impressive work.'

Failure to integrate the URLs into the response is considered an incomplete implementation.

Examples
--------
>>> identify_mentioned_organizations(organizations=['Gates Foundation', 'Candid'])

Parameters
----------
organizations : list[str]
    A list of organization name strings found in a chat response message which need to be matches

Returns
-------
dict[str, OrganizationRecord]
    mapping input name --> Candid Search organization record of the best potential match, including the profile URL

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `organizations` | array | Yes |  |

### Knowledge resources

**Slug:** `CANDID_MCP_KNOWLEDGE_RESOURCES`

Get answers to questions about the social and philanthropic sector directly fom Candid's subject matter experts.

This knowledge includes help articles and video training sessions from Candid's subject matter experts, blog posts
about the sector from Candid staff and trusted partner authors, research documents about the sector and news
articles curated about activity happening in the sector around the world.

Searches are performed through a combination of vector and keyword searching. Results are then re-ranked against
the original query to get the best results.

Search results often come back with specific organizations named, especially if referencing the news. In these cases
the organizations should be identified in Candid's data and links to their profiles **MUST** be included in final
chat response to the user.

Key Usage Requirements:
- Identify names of nonprofits and foundations in the returned text using `identify_mentioned_organizations`
- Always incorporate returned profile URLs directly into the response text
- Replace organization name mentions with hyperlinked Candid profile URLs
- Prioritize creating a seamless user experience by making URLs contextually relevant

Parameters
----------
query : str
    Text describing a user's question or a description of investigative work which requires support from Candid's
    knowledge base
sources : list[SourceNames]
    One or more sources of knowledge from different areas at Candid.
    * Candid Blog: Blog posts from Candid staff and trusted partners intended to help those in the sector or
    illuminate ongoing work
    * Candid Help: Candid FAQs to help user's get started with Candid's product platform and learning resources
    * Candid Learning: Training documents from Candid's subject matter experts
    * Candid News: News articles and press releases about real-time activity in the philanthropic sector
    * IssueLab Research Reports: Academic research reports about the social/philanthropic sector
    * YouTube Training: Transcripts from video-based training seminars from Candid's subject matter experts
news_days_ago : int, optional
    How many days in the past to search for news articles, if a user is asking for recent trends then this value
    should be set lower >~ 10, by default 60
    If output is a string then that means there was some error, and retry should be considered

Returns
-------
list[KnowledgeArticle]

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `query` | string | Yes |  |
| `sources` | array | Yes |  |
| `news_days_ago` | integer | No |  |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `result` | array | Yes |  |

### Search organizations

**Slug:** `CANDID_MCP_SEARCH_ORGANIZATIONS`

Find nonprofits and grantmaking organizations in Candid's database by name, mission, EIN, location, or type of
work. Use to look up a specific organization, find peer organizations, or discover organizations working on a topic.

Search for organizations by name, description or work, program descriptions and locations. Here are some
guidelines:
* `query` controls hybrid searching involving both vector search and keyword search
* `query` can be used to find organizations based on a description of work
* if the query is intended to be a lookup of an organization by name, then adding quotes around the `query` string
 circumvents vector search, and prioritizes keyword matching on names (eg. `query=Candid` --> `query='Candid'`)
* if the query is an EIN (eg. 12-3456789) then keyword searching is prioritized to get exact matches
* adding location information such as postal codes and/or admin1 (state/province abbreviations) will filter results
* adding subject or population codes will filter results
* these results are not comprehensive and are limited to a small set size, several invocations may be necessary to
explore

This tool should be used as a first step in any downstream task which requires identifying the nonprofit that the
user is identifying with. Often, the `nonprofit_id` is required, and that can be found via a search.

Subjects and populations can be determined using the `autocode` tool using unstructured text describing the user's
intended search. Codes strictly filter results, and aren't necessary for general retrieval queries, but may be
used when the user is drilling down on data.

Geographies can be determined using the geo detection tool using unstructured text describing the user's
intended search. Geographies strictly filter results, and aren't necessary for general retrieval queries, but may be
used when the user is drilling down on data.
Key Usage Requirements:
- Always incorporate returned profile URLs directly into the response text
- Replace funding organization name mentions with hyperlinked Candid profile URLs
- Prioritize creating a seamless user experience by making URLs contextually relevant
- Use relevant recipient data as well as inferred metadata to provide explanations about recommendation relevance

Parameters
----------
query : str
    Free text query which drives the search functionality. This uses a hybrid approach of vector and keyword
    searching, but under certain conditions expressed in the 'guidelines' this may disable vector search.
located_postal_code : str | None, optional
    Postal code of the organization to be searched, if provided, by default None
located_admin1 : str | None, optional
    Admin1 code (state/province abbreviation) of the organization to be searched, if provided, by default None
subject_codes : str | None, optional
    Subject codes from Candid's PCS taxonomy, comma separated, by default None
populations_served_codes : str | None, optional
    Population groups served codes from Candid's PCS taxonomy, comma separated, by default None
geonameids_of_geographies_served : str | None, optional
    Geonames ID values for geographies served by organizations in search results, comma separted, by default None
geonameids_of_organization_location : str | None, optional
    Geonames ID values for location(s) of the organizations in search results, comma separted, by default None
org_seal_status : str | None, optional
    Comma separated seals of transparency the resulting organizations should have where the values can be:
        * PLATINUM
        * GOLD
        * SILVER
        * BRONZE
        * NOSEAL
    "PLATINUM" is the most transparent, "NOSEAL" means the organization has claimed their Candid profile but
    abandoned the data update process for whatever reason. None puts no restrictions on this, by default None
leader_demographics : str | None, optional
    Comma separated demographic categories for the result organization's leader where values can be:
        * Woman leader or co-leader
        * BIPOC leader or co-leader
        * LGBTQ+ leader or co-leader
        * Leader or co-leader with a disability
    None puts no restrictions on this, by default None

Examples
--------
>>> organization_search(query='Homeless shelters in new york city')
>>> organization_search(
    query='Homeless shelters in new york city,
    located_admin1='NY',
    geonameids_of_geographies_served='5128581'
)
>>> organization_search(
    query='Homeless shelters in new york city,
    subject_codes='SS090200,SS070102',
    populations_served_codes='PG030100',
    geonameids_of_geographies_served='5128581'
)

Returns
-------
list[OrganizationRecord]
    List of the top organization search results

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `query` | string | Yes |  |
| `subject_codes` | string | No |  |
| `located_admin1` | string | No |  |
| `org_seal_status` | string | No |  |
| `leader_demographics` | string | No |  |
| `located_postal_code` | string | No |  |
| `populations_served_codes` | string | No |  |
| `geonameids_of_geographies_served` | string | No |  |
| `geonameids_of_organization_location` | string | No |  |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `result` | array | Yes |  |

### Taxonomy terms

**Slug:** `CANDID_MCP_TAXONOMY_TERMS`

Uses natural language processing to align input text to Candid's taxonomy, the Philanthropy Classification
System (PCS). The taxonomy describes activity in the social and philanthropic sectors including the purpose of the
activity and what population groups the activity serves. These taxonomy codes can be used for other Candid tools
like organization search to get more specific results.
A complete description of the taxonomy is available to the public at https://taxonomy.candid.org.

Parameters
----------
text : str
    Text describing working in the social sector. This should be related to the social and/or philanthropic sector.

Examples
--------
>>> autocode(text='Housing assistance programs for homeless veterans')

Returns
-------
list[AutocodingRecord]
    Taxonomy responses. The items in the list are each taxonomy terms which the NLP model has determined is relevant
    given the input text. This also includes confidence scores.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `text` | string | Yes |  |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `result` | array | Yes |  |
