usa-npn-mcp-server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@usa-npn-mcp-serverget magnitude phenometrics for aspen in Colorado 2022"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
National Phenology Network MCP Server

Available MCP Tools
export-raw-data- Exports raw data to JSON or JSONL files in allowed directories.get-raw-data- Fetches raw data instead of summaries as from other tools. Limited to 300 records with truncation message if exceeded.individual-phenometrics- Fetches individual phenometrics (summarized data).magnitude-phenometrics- Fetches magnitude phenometrics (magnitude data).mapping- Maps site phenometrics onto a map of the USA with optional color labeling.observation-comment- Fetches observation comments based on observation_id.query-literature- Queries database of structured summaries from 175 papers that use phenology and phenometrics data.query-reference-material- Queries database containing NPN API reference material using a generated SQL query.site-phenometrics- Fetches site phenometrics (site-level data).status-intensity- Fetches status and intensity data (raw observation data). Use sparingly (can return massive datasets), prioritize phenometrics tools.
Available MCP Resources
recent-queries- List of recent query hash IDs and metadata for cached data access.available-roots- List of available root directories for file export operations.
Available MCP Prompts
map-data- Generate a map of the data using the NPN API.
🧑🏿💻 Developing
Prerequisites
uv will manage the virtual environment and dependencies for you.
Install uv for your operating system:
curl -LsSf https://astral.sh/uv/install.sh | shIn powershell, run:
# Install uv
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Clone the repository
Using HTTPS (recommended for most users):
git clone https://github.com/VectorInstitute/usa-npn-mcp-server.gitUsing SSH (if you have SSH keys configured with GitHub):
git clone git@github.com:VectorInstitute/usa-npn-mcp-server.gitAfter cloning with either method:
cd usa-npn-mcp-serverInstalling dependencies
After uv is installed, run:
uv sync
source .venv/bin/activateIn powershell, run:
uv sync
. .\.venv\Scripts\activate.ps1If the last command returns an error about running scripts being disabled on the system, you can run the following command in PowerShell to allow script execution for the current user:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUserThen run the activation command again:
. .\.venv\Scripts\activate.ps1These commands set up and activate the .venv environment as specified in the pyproject.toml and uv.lock files.
Related MCP server: mcp-usgs-water-data
Configuration
Configure for Claude Desktop App
You can download the Claude Desktop Application from here.
Once installed, you will need to modify your claude_desktop_config.json to make it aware of the MCP Server.
How to find and modify claude_desktop_config.json:
Open Claude Desktop app
Click on "Claude" in the menu bar and select "Settings"
In the Settings window, click on the "Developer" tab in the left sidebar
Click the "Edit Config" button
This will open a Finder window showing the location of the
claude_desktop_config.jsonfileOpen the file with your preferred text editor
{
"mcpServers": {
"npn": {
"command": "bash",
"args": [
"-c",
"source /absolute/path/to/usa-npn-mcp-server/.venv/bin/activate && uv run usa_npn_mcp_server /absolute/path/to/export/directory"
]
}
}
} NOTE: Replace /absolute/path/to/usa-npn-mcp-server/ with local path to repo dir and /absolute/path/to/export/directory with local path to directory where you want exported files to be saved (or exclude this part to disable file export). You can specify multiple directories separated by spaces. For more info, see File Export Configuration.
Open Claude Desktop app
CTRL+Comma or Open the menu bar (three bar symbol top-left) and select "File" and "Settings"
In the Settings window, click on the "Developer" tab in the left sidebar
Click the "Edit Config" button
This will open a window showing the location of the
claude_desktop_config.jsonfileOpen the file with your preferred text editor.
{
"mcpServers": {
"npn": {
"command": "cmd.exe",
"args": [
"/c",
"C:\\absolute\\path\\to\\usa-npn-mcp-server\\.venv\\Scripts\\activate.bat && uv run usa_npn_mcp_server C:\\absolute\\path\\to\\export\\directory"
]
}
}
} NOTE: Replace C:\\absolute\\path\\to\\usa-npn-mcp-server\\ with local path to repo dir and C:\\absolute\\path\\to\\export\\directory with local path to directory where you want exported files to be saved (or exclude this part to disable file export). You can specify multiple directories separated by spaces - be sure to use backslashes for Windows paths. For paths containing spaces and more details, see File Export Configuration.
After saving the changes, restart Claude Desktop. If you receive no error messages from the Claude UI, the USA-NPN MCP server is likely installed correctly. Clicking the two buttons in the bottom left of the new chat box should reveal new options with npn labeling.

You should see a new local MCP server in the "Connectors" section of the Settings as below. This example has Filesystem and npn (usa-npn-mcp-server) MCP Servers enabled.

To enable tool use, you can click "Configure" (seen in the image above) and adjust which tools are enabled using the blue sliders and the permissions for each tool.

If you do not configure permissions this way, the tools will be enabled by default and permissions will be set to "Always ask permission" and each tool use will ask with an in-chat pop-up as below.

Recommended Complementary MCP Servers
Additional MCP Servers can be added to Claude Desktop in Settings using the Extensions tab by clicking Browse extensions. For use together with the USA-NPN MCP Server, the two following MCP Servers are recommended:
1. Filesystem:
Let Claude access specified directories in your filesystem to read and write files.
Configure
filesystemwith matching allowed directories asusa-npn-mcp-serverfor making data available during data analysis - both from recent queries saved to file and for externally sourced data files.
Note: A more fully featured alternative is Desktop Commander but it is not available in the listed extensions and would need to be configured by clicking add a custom one and performing custom installation and configuration. However, adding advanced or too many different MCP Servers to Claude can bloat your context window with tool descriptions. If you are experiencing context limitations, consider disabling some or all additional MCP Servers.
2. Context7:
Let Claude access up-to-date code documentation for data analysis.
File Export Configuration
The server supports exporting data to files within specified directories. You can configure allowed export directories in two ways:
Command-line Arguments (Recommended)
Pass directory paths as arguments when starting the server:
# Single directory
uv run usa_npn_mcp_server /path/to/exports
# Multiple directories
uv run usa_npn_mcp_server /path/to/exports /path/to/another/dirEnvironment Variable
Set the NPN_MCP_ALLOWED_DIRS environment variable:
# Unix/macOS (colon-separated)
export NPN_MCP_ALLOWED_DIRS="/path/to/exports:/path/to/another/dir"
# Windows (semicolon-separated)
set NPN_MCP_ALLOWED_DIRS="C:\path\to\exports;D:\another\dir"Windows Paths with Spaces (Escaped Quotes Method)
For paths containing spaces, wrap each path with escaped double quotes (\"):
{
"mcpServers": {
"npn": {
"command": "cmd.exe",
"args": [
"/c",
"\\"C:\\\\Users\\\\John Doe\\\\Documents\\\\usa-npn-mcp-server\\\\.venv\\\\Scripts\\\\activate.bat\\" && uv run usa_npn_mcp_server \\"C:\\\\Program Files\\\\Data Export\\""
]
}
}
}Multiple Windows Paths with Spaces
Quote each path individually when specifying multiple directories:
{
"mcpServers": {
"npn": {
"command": "cmd.exe",
"args": [
"/c",
"\\"C:\\\\Company Software\\\\NPN Tools\\\\usa-npn-mcp-server\\\\.venv\\\\Scripts\\\\activate.bat\\" && uv run usa_npn_mcp_server \\"D:\\\\Shared Data\\\\Research Projects\\" \\"E:\\\\Export Results\\\\Team Analysis\\""
]
}
}
}Security Note: The server will only allow file operations within the specified directories for security.
Debugging
Debugging with MCP Inspector (Currently only macOS and Linux): To run a locally hosted MCP interpreter for debugging, use:
# Without file export
npx @modelcontextprotocol/inspector uv run usa_npn_mcp_server
# With file export to a specific directory
npx @modelcontextprotocol/inspector uv run usa_npn_mcp_server /path/to/exportsThe first time you run this command you'll be prompted to download @modelcontextprotocol/inspector.
This command starts the MCP inspector within the uv-managed environment. The inspector can be used locally in-browser to inspect/test the server.
Testing dependencies: To install dependencies for testing (codestyle, unit tests, integration tests), run:
uv sync --devOther MCP Servers
For examples of other MCP servers and implementation patterns, see: https://github.com/modelcontextprotocol/servers
Available Tools
10 toolsexport-raw-dataA
Export cached raw data to JSON or JSONL file. Requires MCP client to provide roots (allowed directories) for file operations.
| Name | Required | Description | Default |
|---|---|---|---|
| hash_id | Yes | Hash ID of cached query to export | |
| file_format | Yes | Export format: json or jsonl | |
| filename | No | Optional filename. If not provided, auto-generated from hash_id | |
| output_path | No | Output path for the file (relative to root or absolute within allowed roots). If not provided, saves to the first available root directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the root requirement but omits details about behavior on invalid hash_id, file overwrite, or synchronization. Minimal transparency beyond the prerequisite.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states core purpose, second states a crucial prerequisite. No wasted words, front-loaded with essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description should explain return values or success/failure indicators. It also doesn't mention error handling or async behavior. For a file export tool, more context would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents parameters. The description adds context about root requirement, which is not in the schema. This adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'export', the resource 'cached raw data', and the output format 'JSON or JSONL file'. It distinguishes from siblings like get-raw-data which retrieves data but does not export to file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a key prerequisite: requires MCP client to provide roots. However, it does not explicitly state when not to use this tool or suggest alternatives, leaving some gap in guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-raw-dataA
Retrieve raw data from cache using hash ID. Limited to 300 records with truncation message if exceeded. Use 'recent-queries' resource to see available hash IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| hash_id | Yes | Hash ID of cached query to retrieve raw data from |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the 300-record limit and truncation message. No annotations provided, so description carries full burden; it effectively conveys read-only behavior without side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundancy: first states core function, second adds limit and guidance. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequately covers input and behavior given the tool's simplicity and lack of output schema. Could mention return format, but limit detail compensates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already describes hash_id fully; description adds value by directing users to the 'recent-queries' resource for valid IDs, enhancing parameter usability.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states action (retrieve), resource (raw data from cache), and key identifier (hash ID). Distinguishes from sibling 'export-raw-data' which is about exporting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides hint to use 'recent-queries' resource for hash IDs, but does not explicitly state when to use this tool versus alternatives like export-raw-data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
individual-phenometricsA
About the tool: Provides start and end dates of phenological activity for individual plants and animal species, derived from status data. Each record represents one 'phenological episode' - a period of continuous activity for a specific phenophase on an individual organism (like when one specific maple tree's leaves went from bud break to full leaf drop).
When to use: To understand phenological patterns within species, analyze individual plant behavior, study variation between organisms of the same species, or investigate multiple episodes of activity within a single growing season.
Key applications:
Studying phenological diversity within populations
Analyzing individual plant responses to local microclimates
Documenting multiple flowering/leafing episodes in water-limited ecosystems
Understanding species-specific phenological strategies
Quality control for site-level aggregations
Research on plant physiological responses to environmental triggers
Important considerations:
For plants: Shows actual start/end dates for individual organisms
For animals: Shows presence/absence periods at species level (since individual animals aren't tracked)
Requires date range specification (typically calendar year)
Multiple episodes may occur for same individual/phenophase within one season (e.g., after frost damage or drought recovery)
Essential for understanding the biological basis of site-level patterns
Data interpretation: Records show individual_id, phenophase onset/end dates, and episode duration. -9999 values indicate missing data.
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | Yes | Start date in YYYY-MM-DD format. Must be used with end_date. | |
| end_date | Yes | End date in YYYY-MM-DD format. Must be used with start_date. | |
| bottom_left_x1 | No | X coordinate of the bottom left corner for bounding box filtering. | |
| bottom_left_y1 | No | Y coordinate of the bottom left corner for bounding box filtering. | |
| upper_right_x2 | No | X coordinate of the upper right corner for bounding box filtering. | |
| upper_right_y2 | No | Y coordinate of the upper right corner for bounding box filtering. | |
| species_id | No | Unique species identifier. | |
| station_id | No | Unique identifier associated with an observer’s location. | |
| species_type | No | Species type(s) the organism belongs to. Must match values from getAnimalTypes and getPlantTypes. | |
| network | No | Name of the network(s)/group(s) where the organism is observed. Must match values from getPartnerNetworks. | |
| state | No | State where the observation occurred. Uses two-character postal abbreviation. | |
| phenophase_category | No | Phenophase category. Must match values from getPhenophase. | |
| phenophase_id | No | Unique identifier of the phenophase. | |
| functional_type | No | Functional types of the species. Must match values from getSpeciesFunctionalTypes. | |
| climate_data | No | Flag to indicate whether all climate data fields should be returned. Accepts 0 or 1. Almost always beneficial to see climate data in relation to phenometric data. | |
| individual_ids | No | List of unique identifiers of the individuals for which the observations are made. | |
| additional_field | No | Additional fields to include in output. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses key behaviors: requires date range, multiple episodes may occur, difference between plant and animal data, and -9999 indicates missing data. This covers important behavioral aspects beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with clear headings (About, When to use, Key applications, etc.), but it is somewhat verbose. Some points in 'Key applications' overlap with 'When to use'. It could be more concise while retaining key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 17 parameters, no output schema, and is complex. The description covers usage, important considerations, and data interpretation, including mention of individual_id, onset/end dates, and duration. However, it lacks explicit details on result structure, pagination, or error handling, which is a gap for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not add significant meaning beyond the schema descriptions; it mentions high-level concepts like date range and bounding box but does not elaborate on parameter details. The 'Data interpretation' section mentions output fields but not parameter specifics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool provides start and end dates of phenological activity for individual plants and animal species, derived from status data. It specifies the resource (individual phenological episodes) and the verb (provides dates). However, it does not explicitly distinguish from siblings like site-phenometrics, so it misses some differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a 'When to use' section listing specific applications (e.g., studying phenological diversity, analyzing individual responses to microclimates). It provides clear context for intended use but does not explicitly state when not to use or mention alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
magnitude-phenometricsA
About the tool: Summarizes the intensity and abundance of phenological activity across multiple individuals, sites, or time periods using aggregated status and intensity data. Shows 'how much' phenological activity is occurring (not just when), providing insights into the magnitude, synchrony, and temporal patterns of biological processes.
When to use: Understanding broad ecological patterns, studying synchrony between interacting species, analyzing peak activity timing, or investigating how environmental changes affect the intensity of biological processes across populations.
Key applications:
Species synchrony analysis: Quantifying how synchronized phenological timing is between interacting species (pollinators and plants, herbivores and host plants, predators and prey)
Peak activity timing: Identifying when maximum biological activity occurs across populations
Climate change impacts: Studying how warming affects the magnitude and timing of phenological events
Biodiversity patterns: Understanding temporal overlap in species activity within ecosystems
Population-level responses: Analyzing how abundant or widespread phenological activity is across landscapes
Conservation planning: Identifying critical timing windows for species management
Scientific context: Based on current research showing that phenological synchrony between species is shifting due to climate change, with implications for ecosystem functioning and species interactions. This tool helps quantify these critical ecological relationships.
Requires: Date range and frequency parameters (daily, weekly, etc.) are essential. Recommended to specify species and phenophases of interest to avoid overwhelming results. Research applications:
'Are migrating birds arriving when their insect food sources are most abundant?'
'How synchronous is flowering across plant species in prairie communities?'
'Has climate change affected the temporal overlap between butterfly emergence and host plant activity?'
Data interpretation: Results show time-series data of phenological abundance/intensity aggregated by specified frequency. Values represent proportion of 'yes' records, animal abundance measures, or intensity metrics across the selected populations.
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | Yes | Start date in YYYY-MM-DD format. Must be used with end_date. | |
| end_date | Yes | End date in YYYY-MM-DD format. Must be used with start_date. | |
| bottom_left_x1 | No | X coordinate of the bottom left corner for bounding box filtering. | |
| bottom_left_y1 | No | Y coordinate of the bottom left corner for bounding box filtering. | |
| upper_right_x2 | No | X coordinate of the upper right corner for bounding box filtering. | |
| upper_right_y2 | No | Y coordinate of the upper right corner for bounding box filtering. | |
| species_id | No | Unique species identifier. | |
| station_id | No | Unique identifier associated with an observer’s location. | |
| species_type | No | Species type(s) the organism belongs to. Must match values from getAnimalTypes and getPlantTypes. | |
| network | No | Name of the network(s)/group(s) where the organism is observed. Must match values from getPartnerNetworks. | |
| state | No | State where the observation occurred. Uses two-character postal abbreviation. | |
| phenophase_category | No | Phenophase category. Must match values from getPhenophase. | |
| phenophase_id | No | Unique identifier of the phenophase. | |
| functional_type | No | Functional types of the species. Must match values from getSpeciesFunctionalTypes. | |
| climate_data | No | Flag to indicate whether all climate data fields should be returned. Accepts 0 or 1. Almost always beneficial to see climate data in relation to phenometric data. | |
| frequency | Yes | Number of days by which to delineate the period of time. Should be less or equal to number of days between start_date and end_date. | |
| additional_field | No | Additional fields to include in output. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It mentions that results show time-series data of phenological abundance aggregated by frequency, but does not disclose whether the tool is read-only, has authentication requirements, or causes side effects. Key behavioral traits like idempotency or data source limitations are absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is quite long with multiple sections (about, when to use, key applications, scientific context, etc.). While well-structured and informative, it could be more concise. Approximately 200 words, which is acceptable but exceeds the typical length for a tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the large number of parameters (17) and no output schema, the description provides rich scientific context, data interpretation guidance, and example research questions. However, it lacks explicit details on the exact structure of the output (e.g., fields, pagination). This is a minor gap but still informative overall.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 17 parameters have descriptions in the schema (100% coverage). The description adds value by emphasizing the necessity of date range and frequency, recommending species and phenophase specification, and explaining the climate_data flag. It also provides context for how parameters relate to scientific use cases, going beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as summarizing the intensity and abundance of phenological activity across multiple individuals, sites, or time periods. It explicitly distinguishes itself from siblings by focusing on 'how much' rather than 'when', and provides concrete examples like synchrony analysis and peak activity timing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a 'When to use' section listing applications (e.g., species synchrony, climate change impacts), but does not specify when not to use this tool or mention alternative sibling tools. It gives clear context for use but lacks exclusions or direct comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mappingC
Construct a map from results of a previous Site Phenometrics query to the NPN API, using longitude, latitude and specified variables to plot onto map of USA.
| Name | Required | Description | Default |
|---|---|---|---|
| tool_name | Yes | Name of the tool used to generate the data for the plot. | |
| plot_type | Yes | Type of plot to generate. | |
| color_by | No | Variable to be used for color coding the data points. Default is empty string for no coloring. | |
| title | Yes | Title for the plot. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does not disclose side effects, authentication needs, rate limits, or whether the tool modifies data. The only behavioral hint is that it constructs a map, but important traits like destruction or idempotency are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single-sentence description is efficient and front-loaded with the core action. It wastes no words, but could benefit from a brief structure break (e.g., separating purpose from constraints) for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lacks critical details: no output specification (e.g., image, URL), no mention that tool_name and plot_type are fixed (const), and no clarification on how the 'previous query' results are accessed. For a 4-param tool with no output schema, more completeness is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing baseline 3. The description adds context by mentioning longitude, latitude, and variables (though these are not in the schema), which suggests the tool uses data from a prior query. The schema already explains the parameters, so the description adds limited additional meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it constructs a map from a previous Site Phenometrics query using longitude, latitude, and variables to plot on a USA map. It distinguishes the tool from siblings by focusing on visualization rather than data retrieval. However, it does not specify what 'results' means (e.g., a data object or reference), which could cause minor ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool must be used after a Site Phenometrics query but provides no explicit guidance on when to use this tool versus alternatives (e.g., export-raw-data, individual-phenometrics). No exclusions or conditions are stated, leaving the agent without clear decision-making context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
observation-commentA
Retrieve the comment for a given observation (from getObservationComment endpoint), results store as readable Resource 'observation_comment'
| Name | Required | Description | Default |
|---|---|---|---|
| observation_id | Yes | The ID of the observation for which to retrieve the comment |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It mentions the result is stored as a readable resource, which adds some context about persistence. However, it does not specify read-only nature or any side effects, beyond what is implied by 'retrieve'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence. However, it redundantly includes the endpoint URL, which could be omitted for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (one parameter, no output schema), the description adequately covers the purpose, parameter, and result behavior (stored as resource). It does not explain what happens if the comment is missing, but that is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add extra meaning beyond the schema; it simply restates the parameter purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves the comment for a given observation, using a specific endpoint. This verb+resource structure distinguishes it from sibling tools like get-raw-data or individual-phenometrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The description only states what the tool does, not when it is appropriate or when to avoid it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query-literatureC
Query an SQL database for structured summaries of studies that used data collected by National Phenology Network. The tables have the following structure:
Table: literature, Length: 175, Headers: ['Title', 'Authors', 'DOI', 'DOI link', 'Venue', 'Citation count', 'Year', 'Filename', 'Measured variables', 'Temporal Range', 'Spatial Scope', 'Data Filtering', 'Statistical Tests', 'Modelling', 'Software Tools', 'Limitations', 'Main findings', 'Research gaps', 'Future research', 'Independent variables', 'Dependent variables', 'Organism', 'Summary of discussion', 'API Query', "Supporting quotes for 'Measured variables'", "Supporting tables for 'Measured variables'", "Reasoning for 'Measured variables'", "Supporting quotes for 'Temporal Range'", "Supporting tables for 'Temporal Range'", "Reasoning for 'Temporal Range'", "Supporting quotes for 'Spatial Scope'", "Supporting tables for 'Spatial Scope'", "Reasoning for 'Spatial Scope'", "Supporting quotes for 'Data Filtering'", "Supporting tables for 'Data Filtering'", "Reasoning for 'Data Filtering'", "Supporting quotes for 'Statistical Tests'", "Supporting tables for 'Statistical Tests'", "Reasoning for 'Statistical Tests'", "Supporting quotes for 'Modelling'", "Supporting tables for 'Modelling'", "Reasoning for 'Modelling'", "Supporting quotes for 'Software Tools'", "Supporting tables for 'Software Tools'", "Reasoning for 'Software Tools'", "Supporting quotes for 'Limitations'", "Supporting tables for 'Limitations'", "Reasoning for 'Limitations'", "Supporting quotes for 'Main findings'", "Supporting tables for 'Main findings'", "Reasoning for 'Main findings'", "Supporting quotes for 'Research gaps'", "Supporting tables for 'Research gaps'", "Reasoning for 'Research gaps'", "Supporting quotes for 'Future research'", "Supporting tables for 'Future research'", "Reasoning for 'Future research'", "Supporting quotes for 'Independent variables'", "Supporting tables for 'Independent variables'", "Reasoning for 'Independent variables'", "Supporting quotes for 'Dependent variables'", "Supporting tables for 'Dependent variables'", "Reasoning for 'Dependent variables'", "Supporting quotes for 'Organism'", "Supporting tables for 'Organism'", "Reasoning for 'Organism'", "Supporting quotes for 'Summary of discussion'", "Supporting tables for 'Summary of discussion'", "Reasoning for 'Summary of discussion'", "Supporting quotes for 'API Query'", "Supporting tables for 'API Query'", "Reasoning for 'API Query'"]
Description: Contains structured summaries of 175 papers that use phenology and phenometrics, included in the table is the reasoning and sourcing for each summary column.
| Name | Required | Description | Default |
|---|---|---|---|
| sql_query | Yes | SQL query to run against the SQLite3 database to fetch relevant data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as whether the tool is read-only, destructive, or requires authentication. The SQL query nature implies read access, but this is not explicitly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is overly long (listing all 70+ table headers) and not front-loaded effectively. While informative, it could summarize the table structure more concisely without sacrificing essential details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter and no output schema, the description adequately covers the table schema needed for querying. However, it lacks usage guidelines and behavioral transparency, which are important for complete context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While the schema already describes the 'sql_query' parameter, the description adds significant value by detailing the entire table structure (headers, rows, descriptions). This helps agents formulate precise queries, compensating for the minimal parameter description in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Query an SQL database for structured summaries of studies' which clearly indicates the tool's function (querying literature data). It distinguishes from siblings like 'get-raw-data' which focus on raw observation data. However, it could be more specific about the type of literature (e.g., phenology studies).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'export-raw-data' or 'observation-comment'. It does not specify when not to use it or mention any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query-reference-materialB
Query an SQL database for reference material that can be used to translate natural language into specific ids and terms needed for querying the NPN API with other tools. There is no need to query the 'datasets' table unless specific observer groups are mentioned. The Tables have the following structure:
Table: species, Length: 1940, Headers: ['species_id', 'common_name', 'genus', 'genus_id', 'genus_common_name', 'species', 'kingdom', 'itis_taxonomic_sn', 'functional_type', 'class_id', 'class_common_name', 'class_name', 'order_id', 'order_common_name', 'order_name', 'family_id', 'family_name', 'family_common_name', 'species_type']
Description: Contains info on species
Table: phenophases, Length: 400, Headers: ['definition_id', 'phenophase_id', 'phenophase_name', 'definition', 'start_date', 'end_date', 'dataset_id', 'comments']
Description: Contains info on phenophases
Table: phenoclasses, Length: 230, Headers: ['phenophase_id', 'phenophase_description', 'definition_ids', 'phenophase_names']
Description: Contains info on phenoclasses (a grouping of phenophases)
Table: datasets, Length: 14, Headers: ['dataset_id', 'dataset_name', 'dataset_description', 'dataset_comments', 'dataset_documentation_url']
Description: Contains info on datasets and their contributors
Table: networks, Length: 924, Headers: ['network_id', 'network_name']
Description: Contains info on observation groups or networks (aka partner groups)
| Name | Required | Description | Default |
|---|---|---|---|
| sql_query | Yes | SQL query to run against the SQLite3 database to fetch relevant data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It does not state whether the tool is read-only, required permissions, rate limits, or side effects. The table descriptions hint at a non-destructive query, but it is not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy due to detailed table schemas, which are necessary for writing SQL but could be summarized. The purpose is stated upfront, but the overall structure could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should explain return format and error handling. It lists table headers but does not specify how results are returned or any limitations. For a single-parameter tool, this leaves gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single 'sql_query' parameter, so baseline is 3. The description provides table structures that aid in formulating queries, adding practical value beyond the schema's generic description, but does not enhance parameter semantics directly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool queries an SQL database for reference material to translate natural language into specific IDs and terms for other NPN API tools. It clearly distinguishes itself from sibling tools focused on raw data or phenometrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises against querying the 'datasets' table unless specific observer groups are mentioned, providing direct usage guidance. It implies use before other tools but does not explicitly contrast with siblings or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site-phenometricsA
About the tool: Aggregates individual phenological data to provide average start and end dates of phenological activity for each species at each monitoring site. Represents the 'typical' timing for a species at a location by averaging across all individuals of that species at the site.
When to use: Creating phenological calendars, analyzing site-specific timing patterns, comparing phenology across locations, understanding regional growing seasons, or studying how local climate affects species timing.
Key applications:
Phenological calendars: Creating seasonal timing guides for specific locations
Growing season analysis: Quantifying length of active growing periods for sites/regions
Climate relationship studies: Investigating how phenological timing relates to temperature, precipitation, and seasonal patterns
Site comparisons: Comparing phenological timing across elevation gradients, latitude gradients, or different habitat types
Regional management: Planning for activities like controlled burns, invasive species management, or ecotourism
Agricultural applications: Understanding wild plant timing to inform crop management decisions
Scientific context: Site phenometrics average out individual variation to reveal location-specific phenological signatures. Essential for understanding how climate drivers affect species timing at landscape scales.
Research applications:
'When do oak leaves typically emerge at Yellowstone vs. Great Smoky Mountains?'
'How long is the typical growing season for maple species in Minnesota?'
'When should we expect peak wildflower blooms in different Colorado elevation zones?'
Data interpretation: Each record represents one species at one site for the specified time period. Start/end dates are averages across individuals. Sites represent uniform habitat areas ≤15 acres. Values of -9999 represent missing/null data.
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | Yes | Start date in YYYY-MM-DD format. Must be used with end_date. | |
| end_date | Yes | End date in YYYY-MM-DD format. Must be used with start_date. | |
| bottom_left_x1 | No | X coordinate of the bottom left corner for bounding box filtering. | |
| bottom_left_y1 | No | Y coordinate of the bottom left corner for bounding box filtering. | |
| upper_right_x2 | No | X coordinate of the upper right corner for bounding box filtering. | |
| upper_right_y2 | No | Y coordinate of the upper right corner for bounding box filtering. | |
| species_id | No | Unique species identifier. | |
| station_id | No | Unique identifier associated with an observer’s location. | |
| species_type | No | Species type(s) the organism belongs to. Must match values from getAnimalTypes and getPlantTypes. | |
| network | No | Name of the network(s)/group(s) where the organism is observed. Must match values from getPartnerNetworks. | |
| state | No | State where the observation occurred. Uses two-character postal abbreviation. | |
| phenophase_category | No | Phenophase category. Must match values from getPhenophase. | |
| phenophase_id | No | Unique identifier of the phenophase. | |
| functional_type | No | Functional types of the species. Must match values from getSpeciesFunctionalTypes. | |
| climate_data | No | Flag to indicate whether all climate data fields should be returned. Accepts 0 or 1. Almost always beneficial to see climate data in relation to phenometric data. | |
| individual_ids | No | List of unique identifiers of the individuals for which the observations are made. | |
| additional_field | No | Additional fields to include in output. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool averages individual data, uses -9999 for missing values, and specifies site size. While no annotations are provided, the description covers key behavioral aspects, though it could explicitly state the tool is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections and front-loaded with the tool's purpose. While it is lengthy, each section adds value by providing examples and applications. It is concise for the amount of information conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 17 parameters and no output schema, the description provides sufficient context on purpose, usage, and data interpretation. It explains averaging and missing values, though it could benefit from describing the output format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does not add significant parameter-level details beyond the schema, but it provides overall context. This is adequate given the schema covers all parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool aggregates individual phenological data to provide average start and end dates for each species at each monitoring site. It distinguishes itself from sibling tools like 'individual-phenometrics' by emphasizing the averaging across individuals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a 'When to use' section listing several applications and examples, providing clear context for usage. However, it does not explicitly mention when not to use the tool or compare it with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
status-intensityA
About the tool: Retrieves raw, unprocessed observation records from citizen and professional scientists documenting day-by-day phenological status (yes/no) and intensity measurements for individual plants and animal species. Each record represents a single observation event showing whether specific phenophases (like 'breaking leaf buds' or 'full bloom') were occurring on a particular date for a specific individual organism at a monitoring site.
When to use: Only for detailed analysis of specific observation events, quality control, or when you need the granular day-to-day data that underlies the aggregated metrics. Most users should use Individual, Site, or Magnitude Phenometrics instead.
Key applications: Data validation, understanding observer reporting patterns, analyzing day-to-day phenological transitions, custom aggregations not available in other tools. Performance warning: This tool can return massive datasets (potentially millions of records). Always limit queries to small date ranges (≤30 days recommended) and specific geographic areas or species to prevent system crashes. Use aggregated tools (Individual/Site/Magnitude Phenometrics) for broader analyses.
Data interpretation: Values of -9999 represent missing/null data. Records include observation date, individual ID, phenophase status, intensity measurements, and site metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | Yes | Start date in YYYY-MM-DD format. Must be used with end_date. | |
| end_date | Yes | End date in YYYY-MM-DD format. Must be used with start_date. | |
| bottom_left_x1 | No | X coordinate of the bottom left corner for bounding box filtering. | |
| bottom_left_y1 | No | Y coordinate of the bottom left corner for bounding box filtering. | |
| upper_right_x2 | No | X coordinate of the upper right corner for bounding box filtering. | |
| upper_right_y2 | No | Y coordinate of the upper right corner for bounding box filtering. | |
| species_id | No | Unique species identifier. | |
| station_id | No | Unique identifier associated with an observer’s location. | |
| species_type | No | Species type(s) the organism belongs to. Must match values from getAnimalTypes and getPlantTypes. | |
| network | No | Name of the network(s)/group(s) where the organism is observed. Must match values from getPartnerNetworks. | |
| state | No | State where the observation occurred. Uses two-character postal abbreviation. | |
| phenophase_category | No | Phenophase category. Must match values from getPhenophase. | |
| phenophase_id | No | Unique identifier of the phenophase. | |
| functional_type | No | Functional types of the species. Must match values from getSpeciesFunctionalTypes. | |
| climate_data | No | Flag to indicate whether all climate data fields should be returned. Accepts 0 or 1. Almost always beneficial to see climate data in relation to phenometric data. | |
| additional_field | No | Additional fields to include in output. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It explains raw data nature, missing values (-9999), and includes a performance warning about massive datasets. Could explicitly state read-only nature but is comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with sections for clarity, but somewhat lengthy. Every section adds value; could be slightly more concise but effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 16 parameters and no output schema, the description covers purpose, usage, performance, and data interpretation comprehensively. Lacks specific output format details but acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The description adds context by recommending small date ranges and bounding box filtering to prevent crashes, enhancing parameter understanding beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies that the tool retrieves raw, unprocessed observation records with phenological status and intensity. It contrasts with aggregated sibling tools like Individual Phenometrics, making the purpose distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'When to use' and 'When not to use' sections with named alternatives (Individual/Site/Magnitude Phenometrics). Provides concrete applications like data validation and custom aggregations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
10 tool updates
v0.1.0- First observed
export-raw-data - First observed
get-raw-data - First observed
individual-phenometrics - First observed
magnitude-phenometrics - First observed
mapping - First observed
observation-comment - First observed
query-literature - First observed
query-reference-material - First observed
site-phenometrics - First observed
status-intensity
TDQS
Each tool has a clearly distinct purpose: raw data handling (export/get), individual, site, and magnitude phenometrics, mapping, observation comments, literature and reference queries, and raw status records. There is no overlap or ambiguity among the tool descriptions.
Tool names consistently use lowercase, hyphen-separated words (e.g., 'export-raw-data', 'individual-phenometrics', 'query-literature'). While not strictly verb_noun, the pattern is uniform and descriptive, with only 'mapping' deviating slightly as a single word.
With 10 tools, the server is well-scoped for its domain. Each tool addresses a specific aspect of phenology data access and analysis, covering raw data, aggregated metrics, literature, and reference material without unnecessary duplication.
The tool set provides comprehensive coverage for the National Phenology Network data: raw observation retrieval, multiple levels of phenometric aggregation, metadata queries, literature search, and mapping. No major gaps are apparent for typical use cases.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Query real-time and historical USGS water data from ~8,000 stream gages and groundwater wells.
Search NOAA climate stations and datasets, fetch historical weather observations.
USGS Water MCP — wraps USGS National Water Information System (NWIS) REST services (free, no auth)
GBIF MCP — wraps the Global Biodiversity Information Facility API v1 (free, no auth)
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides access to the eBird API 2.0 for retrieving bird observation data, checklists, regional statistics, taxonomy information, and hotspot locations worldwide.251MIT
- AlicenseAqualityBmaintenanceEnables querying USGS water data including real-time and historical streamflow, gage height, and water temperature from USGS gauges across the United States.3MIT
- AlicenseNot gradedqualityFmaintenanceWraps USGS NWIS REST services to query water data such as streamflow, groundwater levels, and water quality.6MIT
- AlicenseNot gradedqualityCmaintenanceEnables querying recent bird observations from the eBird citizen-science database by location.9MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/VectorInstitute/usa-npn-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server