searchNpmPackage
Find detailed information about npm packages directly from the NPM MCP Server. Input a package name to retrieve metadata and discover its usage in the npm ecosystem.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| packageName | Yes |
Input Schema (JSON Schema)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"packageName": {
"type": "string"
}
},
"required": [
"packageName"
],
"type": "object"
}
Implementation Reference
- src/index.ts:37-92 (handler)Handler function for the 'searchNpmPackage' MCP tool. Fetches package info from npm registry, processes it, logs details, and returns structured JSON content.async ({ packageName }) => { try { console.log(`\nBuscando informações para o pacote: ${packageName}`); const response = await fetch(`https://registry.npmjs.org/${packageName}`); const data = (await response.json()) as NpmPackage; if (response.ok) { const result = { name: data.name, version: data["dist-tags"].latest, description: data.description, author: typeof data.author === 'string' ? data.author : data.author?.name, homepage: data.homepage, repository: data.repository?.url, dependencies: data.versions[data["dist-tags"].latest].dependencies }; console.log('\nInformações do pacote:'); console.log('-------------------'); Object.entries(result).forEach(([key, value]) => { if (key === 'dependencies') { console.log('\nDependências:'); console.log(JSON.stringify(value, null, 2)); } else { console.log(`${key}: ${value}`); } }); return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] }; } else { const errorMsg = `Erro: Pacote '${packageName}' não encontrado`; console.log(`\n${errorMsg}`); return { content: [{ type: "text", text: errorMsg }] }; } } catch (error: unknown) { const errorMessage = error instanceof Error ? error.message : 'Erro desconhecido'; const errorMsg = `Erro ao buscar informações do pacote: ${errorMessage}`; console.log(`\n${errorMsg}`); return { content: [{ type: "text", text: errorMsg }] }; } }
- src/index.ts:34-93 (registration)Registers the 'searchNpmPackage' tool on the MCP server with name, input schema, and handler function.server.tool( "searchNpmPackage", { packageName: z.string() }, async ({ packageName }) => { try { console.log(`\nBuscando informações para o pacote: ${packageName}`); const response = await fetch(`https://registry.npmjs.org/${packageName}`); const data = (await response.json()) as NpmPackage; if (response.ok) { const result = { name: data.name, version: data["dist-tags"].latest, description: data.description, author: typeof data.author === 'string' ? data.author : data.author?.name, homepage: data.homepage, repository: data.repository?.url, dependencies: data.versions[data["dist-tags"].latest].dependencies }; console.log('\nInformações do pacote:'); console.log('-------------------'); Object.entries(result).forEach(([key, value]) => { if (key === 'dependencies') { console.log('\nDependências:'); console.log(JSON.stringify(value, null, 2)); } else { console.log(`${key}: ${value}`); } }); return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] }; } else { const errorMsg = `Erro: Pacote '${packageName}' não encontrado`; console.log(`\n${errorMsg}`); return { content: [{ type: "text", text: errorMsg }] }; } } catch (error: unknown) { const errorMessage = error instanceof Error ? error.message : 'Erro desconhecido'; const errorMsg = `Erro ao buscar informações do pacote: ${errorMessage}`; console.log(`\n${errorMsg}`); return { content: [{ type: "text", text: errorMsg }] }; } } );
- src/index.ts:36-36 (schema)Input schema for the tool using Zod: requires a 'packageName' string.{ packageName: z.string() },
- src/index.ts:7-15 (helper)TypeScript interface defining the structure of NPM package data used in the handler.interface NpmPackage { name: string; description: string; "dist-tags": { latest: string }; versions: { [key: string]: { dependencies: Record<string, string> } }; author: { name: string } | string; homepage: string; repository: { url: string }; }