Skip to main content
Glama
KyrieTangSheng

National Parks MCP Server

findParks

Search U.S. national parks by state, name, activities, or other criteria to find parks matching your interests and location.

Instructions

Search for national parks based on state, name, activities, or other criteria

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
stateCodeNoFilter parks by state code (e.g., "CA" for California, "NY" for New York). Multiple states can be comma-separated (e.g., "CA,OR,WA")
qNoSearch term to filter parks by name or description
limitNoMaximum number of parks to return (default: 10, max: 50)
startNoStart position for results (useful for pagination)
activitiesNoFilter by available activities (e.g., "hiking,camping")

Implementation Reference

  • The main handler function for the 'findParks' tool. It validates input, calls the NPS API via npsApiClient, formats the data, and returns a JSON string response.
    export async function findParksHandler(args: z.infer<typeof FindParksSchema>) { // Validate state codes if provided if (args.stateCode) { const providedStates = args.stateCode.split(',').map(s => s.trim().toUpperCase()); const invalidStates = providedStates.filter(state => !STATE_CODES.includes(state)); if (invalidStates.length > 0) { return { content: [{ type: "text", text: JSON.stringify({ error: `Invalid state code(s): ${invalidStates.join(', ')}`, validStateCodes: STATE_CODES }) }] }; } } // Set default limit if not provided or if it exceeds maximum const limit = args.limit ? Math.min(args.limit, 50) : 10; // Format the request parameters const requestParams = { limit, ...args }; const response = await npsApiClient.getParks(requestParams); // Format the response for better readability by the AI const formattedParks = formatParkData(response.data); const result = { total: parseInt(response.total), limit: parseInt(response.limit), start: parseInt(response.start), parks: formattedParks }; return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] }; }
  • Zod schema defining the input parameters for the findParks tool, including optional filters like stateCode, search query, limit, etc.
    export const FindParksSchema = z.object({ stateCode: z.string().optional().describe('Filter parks by state code (e.g., "CA" for California, "NY" for New York). Multiple states can be comma-separated (e.g., "CA,OR,WA")'), q: z.string().optional().describe('Search term to filter parks by name or description'), limit: z.number().optional().describe('Maximum number of parks to return (default: 10, max: 50)'), start: z.number().optional().describe('Start position for results (useful for pagination)'), activities: z.string().optional().describe('Filter by available activities (e.g., "hiking,camping")') });
  • src/server.ts:43-47 (registration)
    Registration of the 'findParks' tool in the ListToolsRequestSchema handler, specifying name, description, and input schema.
    { name: "findParks", description: "Search for national parks based on state, name, activities, or other criteria", inputSchema: zodToJsonSchema(FindParksSchema), },
  • src/server.ts:85-88 (registration)
    Dispatch/execution registration for 'findParks' in the CallToolRequestSchema switch statement, parsing args and calling the handler.
    case "findParks": { const args = FindParksSchema.parse(request.params.arguments); return await findParksHandler(args); }

Latest Blog Posts

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/KyrieTangSheng/mcp-server-nationalparks'

If you have feedback or need assistance with the MCP directory API, please join our Discord server