get_dependency_types
Retrieve TypeScript definitions for npm packages to inspect exposed APIs and types before running Node.js scripts with unfamiliar dependencies.
Instructions
Given an array of npm package names (and optional versions), fetch whether each package ships its own TypeScript definitions or has a corresponding @types/… package, and return the raw .d.ts text.
Useful whenwhen you're about to run a Node.js script against an unfamiliar dependency and want to inspect what APIs and types it exposes.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| dependencies | Yes |
Implementation Reference
- src/tools/getDependencyTypes.ts:15-84 (handler)The main handler function that fetches TypeScript type definitions for given npm dependencies by checking package metadata and @types packages.export default async function getDependencyTypes({ dependencies, }: { dependencies: { name: string; version?: string }[]; }): Promise<McpResponse> { const results: { name: string; hasTypes: boolean; types?: string; typesPackage?: string; version?: string; }[] = []; for (const dep of dependencies) { const info: (typeof results)[number] = { name: dep.name, hasTypes: false }; try { const pkgRes = await fetch(`https://registry.npmjs.org/${dep.name}`); if (pkgRes.ok) { const pkgMeta = (await pkgRes.json()) as any; const latestTag = pkgMeta['dist-tags']?.latest as string; const versionToUse = dep.version || latestTag; const versionData = pkgMeta.versions?.[versionToUse]; // Check for in-package types if (versionData) { const typesField = versionData.types || versionData.typings; if (typesField) { const url = `https://unpkg.com/${dep.name}@${versionToUse}/${typesField}`; const contentRes = await fetch(url); if (contentRes.ok) { info.hasTypes = true; info.types = await contentRes.text(); info.version = versionToUse; results.push(info); continue; } } } // Fallback to @types package const sanitized = dep.name.replace('@', '').replace('/', '__'); const typesName = `@types/${sanitized}`; const typesRes = await fetch( `https://registry.npmjs.org/${encodeURIComponent(typesName)}` ); if (typesRes.ok) { const typesMeta = (await typesRes.json()) as any; const typesVersion = typesMeta['dist-tags']?.latest as string; const typesVersionData = typesMeta.versions?.[typesVersion]; const typesField = typesVersionData?.types || typesVersionData?.typings || 'index.d.ts'; const url = `https://unpkg.com/${typesName}@${typesVersion}/${typesField}`; const contentRes = await fetch(url); if (contentRes.ok) { info.hasTypes = true; info.typesPackage = typesName; info.version = typesVersion; info.types = await contentRes.text(); } } } } catch (e) { logger.info(`Failed to fetch type info for ${dep.name}: ${e}`); } results.push(info); } return { content: [textContent(JSON.stringify(results))] }; }
- src/tools/getDependencyTypes.ts:6-13 (schema)Zod schema defining the input arguments for the get_dependency_types tool, specifically an array of dependencies with name and optional version.export const argSchema = { dependencies: z.array( z.object({ name: z.string(), version: z.string().optional(), }) ), };
- src/server.ts:100-112 (registration)Registration of the 'get_dependency_types' tool on the MCP server using server.tool() with name, description, schema, and handler.server.tool( 'get_dependency_types', ` Given an array of npm package names (and optional versions), fetch whether each package ships its own TypeScript definitions or has a corresponding @types/… package, and return the raw .d.ts text. Useful whenwhen you're about to run a Node.js script against an unfamiliar dependency and want to inspect what APIs and types it exposes. `, getDependencyTypesSchema, getDependencyTypes );