UNPKG MCP
Provides live npm and UNPKG data for AI agents, enabling version resolution, file discovery, project audits, import-map validation, and malware/CVE checks. It supports anonymous access for general tools and optional Shield login for organization-specific domain data and edge simulation.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mcp.unpkg.com/mcpWhat its tools do
14 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Resolve exact package versions and browser entry points
- Audit project dependencies for UNPKG conversion
- Check packages for malware verdicts and CVEs
- Validate and generate import maps
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- unpkg-mcp 1.0.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 14 advertised
- Resources
- 2 advertised
- Resource templates
- 0 advertised
- Prompts
- 3 advertised
{
"tools": {
"listChanged": true
},
"prompts": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
14 advertised
resolve_package — Resolve an npm package version
Resolve a package name plus exact version, dist-tag, or semver range to the version that exists on npm today, with its browser entry points. Use this instead of recalling versions from memory.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"package"
],
"properties": {
"package": {
"type": "string",
"description": "npm package name, e.g. react or @scope/name"
},
"version": {
"type": "string",
"description": "Exact version, dist-tag, or semver range. Defaults to latest."
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name",
"requested",
"resolvedVersion",
"distTags",
"entryPoints",
"peerDependencies"
],
"properties": {
"name": {
"type": "string"
},
"distTags": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"requested": {
"type": "string"
},
"entryPoints": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"resolvedVersion": {
"type": "string"
},
"peerDependencies": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}list_files — List files in a package version
List the real files inside an exact or resolvable package version via UNPKG ?meta. Use this before choosing a file path; never guess paths.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"package"
],
"properties": {
"path": {
"type": "string",
"description": "Directory prefix inside the package, e.g. /dist/. Defaults to /."
},
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Max files to return. Defaults to 200."
},
"package": {
"type": "string"
},
"version": {
"type": "string",
"description": "Defaults to latest; resolved before listing."
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"package",
"version",
"prefix",
"totalFiles",
"truncated",
"files"
],
"properties": {
"files": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"prefix": {
"type": "string"
},
"package": {
"type": "string"
},
"version": {
"type": "string"
},
"truncated": {
"type": "boolean"
},
"totalFiles": {
"type": "number"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}build_file_url — Build a canonical UNPKG file URL
Build a direct UNPKG file URL (the original file lookup) with a deliberate version policy, verifying the file exists when a path is given.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"package"
],
"properties": {
"file": {
"type": "string",
"description": "File path inside the package. Defaults to the resolved entry point."
},
"policy": {
"enum": [
"preserve",
"exact",
"patch",
"range"
],
"type": "string",
"description": "preserve: keep the given spec (default). exact: resolved version. patch: major.minor (bug fixes flow). range: ^major.minor.patch."
},
"package": {
"type": "string"
},
"subpath": {
"type": "string",
"description": "Package subpath import, e.g. hooks for preact/hooks. Resolved through the exports map, then file discovery. Ignored when file is given."
},
"version": {
"type": "string",
"description": "Exact version, dist-tag, or range to resolve. Defaults to latest."
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url",
"package",
"specUsed",
"resolvedVersion",
"file",
"verifiedFileExists"
],
"properties": {
"url": {
"type": "string"
},
"file": {
"type": "string"
},
"package": {
"type": "string"
},
"specUsed": {
"type": "string"
},
"resolvedVersion": {
"type": "string"
},
"verifiedFileExists": {
"type": [
"boolean",
"null"
]
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}audit_dependencies — Audit dependencies for UNPKG conversion
Classify a project's runtime dependencies for conversion to direct UNPKG file lookups, in framework context when given. Read the project's package.json yourself and pass its dependencies map; this tool checks each package against live npm/UNPKG data and returns convert_now / convert_carefully / keep_bundled / needs_review with suggested URLs and an import map for the safe conversions. IMPORTANT: suitability is not usage. Before calling, scan the project's HTML/files for an existing import map and CDN URLs and pass them as existingImports; entries already on UNPKG come back as already_on_unpkg, not conversion candidates. If you did not scan, say so — currentUsage will be absent rather than falsely 'not detected'. Only pass runtime dependencies, never devDependencies.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"dependencies"
],
"properties": {
"framework": {
"enum": [
"next",
"nuxt",
"sveltekit",
"remix",
"astro",
"gatsby"
],
"type": "string",
"description": "The project's framework, if any. Framework-managed packages (react/react-dom in Next, vue in Nuxt, ...) are classified keep_bundled in context. Auto-detected from the dependency map when omitted."
},
"dependencies": {
"type": "object",
"description": "Map of package name to the version spec from package.json, e.g. { \"preact\": \"^10.25.4\" }",
"additionalProperties": {
"type": "string"
}
},
"existingImports": {
"type": "object",
"description": "Existing imports found in the project: bare specifier to current URL, typically an import map extracted from HTML (include subpath keys like preact/hooks). Pass {} if you scanned and found none. Omit only if you did not scan; the result then reports current usage as unknown instead of not detected.",
"additionalProperties": {
"type": "string"
}
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"framework",
"frameworkNote",
"scopeNote",
"currentStateSummary",
"shieldVerdicts",
"shieldNote",
"summary",
"dependencies",
"importmap",
"importmapScope",
"peerImportsAdded",
"peerNotes",
"mapValidation",
"impact",
"nextSteps"
],
"properties": {
"impact": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"summary": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"framework": {
"type": [
"string",
"null"
]
},
"importmap": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"nextSteps": {
"type": "string"
},
"peerNotes": {
"type": "array",
"items": {
"type": "string"
}
},
"scopeNote": {
"type": "string"
},
"shieldNote": {
"type": [
"string",
"null"
]
},
"dependencies": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"frameworkNote": {
"type": [
"string",
"null"
]
},
"mapValidation": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": true
},
{
"type": "null"
}
]
},
"importmapScope": {
"type": "string"
},
"shieldVerdicts": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
{
"type": "null"
}
]
},
"peerImportsAdded": {
"type": "array",
"items": {
"type": "string"
}
},
"currentStateSummary": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}verify_url — Verify a UNPKG URL resolves
Check that a UNPKG file URL actually resolves (follows redirects) before you put it in a project.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "A full https://unpkg.com/... file URL."
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok",
"status",
"finalUrl",
"contentType"
],
"properties": {
"ok": {
"type": "boolean"
},
"status": {
"type": "number"
},
"finalUrl": {
"type": "string"
},
"contentType": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}generate_importmap — Generate an import map for UNPKG packages
Resolve a set of bare specifiers to UNPKG file URLs and return a ready-to-paste import map. Entry files are resolved live from each package.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"entries"
],
"properties": {
"entries": {
"type": "array",
"items": {
"type": "object",
"required": [
"specifier",
"package"
],
"properties": {
"file": {
"type": "string",
"description": "Explicit file; defaults to the package entry point."
},
"package": {
"type": "string"
},
"version": {
"type": "string"
},
"specifier": {
"type": "string",
"description": "Bare specifier used in imports, e.g. preact or preact/hooks"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"importmap",
"resolved"
],
"properties": {
"resolved": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"importmap": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}check_importmap — Validate an import map as a system
Validate an existing or proposed import map: every UNPKG URL resolves, files exist, versions are mutually consistent (including react/react-dom pairing and duplicate-version skew), loose specs are flagged, and framework-managed packages are errors when a framework is given or detected. Run this after generate_importmap or an audit, before committing to a conversion.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"imports"
],
"properties": {
"imports": {
"type": "object",
"description": "The import map's imports object: bare specifier to URL.",
"additionalProperties": {
"type": "string"
}
},
"framework": {
"enum": [
"next",
"nuxt",
"sveltekit",
"remix",
"astro",
"gatsby"
],
"type": "string"
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok",
"framework",
"entries",
"globalIssues"
],
"properties": {
"ok": {
"type": "boolean"
},
"entries": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"framework": {
"type": [
"string",
"null"
]
},
"globalIssues": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}search_packages — Search npm for browser-suitable packages
Search npm for a need (e.g. 'date picker', 'markdown parser') and annotate each result with browser readiness for direct UNPKG file lookup: browser-ready ESM, CommonJS-only, or unclear, with the entry file and size when known. Ranking is npm's relevance order; readiness is annotated, never hidden, so a CJS-only result is visible as such rather than silently dropped.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "Results to annotate. Defaults to 5."
},
"query": {
"type": "string",
"description": "What the package should do, e.g. 'confetti', 'sanitize html', 'date picker'."
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query",
"results",
"note"
],
"properties": {
"note": {
"type": "string"
},
"query": {
"type": "string"
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}estimate_migration_impact — Rough bandwidth/cost impact of a conversion
Order-of-magnitude estimate of bandwidth offloaded (and hosting dollars, if a $/GB is given) when bytes move from first-party hosting to UNPKG. Range-based with explicit assumptions and caveats; it cannot forecast latency or Core Web Vitals. Get unpkgBytesPerPageLoad from audit_dependencies' impact.convertNowEntryBytes plus any transitive files the caller chooses to include.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"monthlyPageViews",
"unpkgBytesPerPageLoad"
],
"properties": {
"browserCacheRate": {
"type": "number",
"maximum": 0.95,
"minimum": 0,
"description": "Share of loads served from browser cache. Default 0.5."
},
"monthlyPageViews": {
"type": "number",
"exclusiveMinimum": 0
},
"bandwidthCostPerGbUsd": {
"type": "number",
"description": "Current hosting $/GB, if known. Omit to skip dollars.",
"exclusiveMinimum": 0
},
"unpkgBytesPerPageLoad": {
"type": "number",
"description": "Raw bytes per page load moving to UNPKG.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"monthlyGbOffloaded",
"monthlySavingsUsd",
"perLoadWireBytes",
"transferTimeEquivalentMs",
"assumptions",
"caveats",
"betterMetrics"
],
"properties": {
"caveats": {
"type": "array",
"items": {
"type": "string"
}
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
}
},
"betterMetrics": {
"type": "array",
"items": {
"type": "string"
}
},
"perLoadWireBytes": {
"$ref": "#/properties/monthlyGbOffloaded"
},
"monthlySavingsUsd": {
"anyOf": [
{
"$ref": "#/properties/monthlyGbOffloaded"
},
{
"type": "null"
}
]
},
"monthlyGbOffloaded": {
"type": "object",
"required": [
"low",
"high"
],
"properties": {
"low": {
"type": "number"
},
"high": {
"type": "number"
}
},
"additionalProperties": false
},
"transferTimeEquivalentMs": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}shield_whoami — Shield account for the logged-in user
Return the Shield account, organization, and entitlements for the OAuth login on this connection. Requires an approved Shield account; anonymous connections get an authorization_required error with reconnect instructions.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}shield_simulate_request — Simulate a Shield edge decision
Preview what Shield would do for one package@version request (optionally with referer/origin) under the logged-in user's effective pin/block rules, using the same rule-matching semantics as the edge.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"package",
"version"
],
"properties": {
"path": {
"type": "string"
},
"origin": {
"type": "string"
},
"package": {
"type": "string"
},
"referer": {
"type": "string"
},
"version": {
"type": "string"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}shield_check_packages — Malware verdicts and CVEs for package versions
Check exact package@version pairs against Shield intel: malware verdict (with review state) and CVEs affecting that version, including the first patched version. Works anonymously for packages you name (25 per call); Shield login raises the cap to 200. Domain data still requires login. Missing pairs were not scanned yet — absence is not a clean verdict.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"packages"
],
"properties": {
"packages": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"version"
],
"properties": {
"name": {
"type": "string"
},
"version": {
"type": "string"
}
},
"additionalProperties": false
},
"maxItems": 200,
"minItems": 1
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}shield_domain_packages — Shield-observed packages on your domains
List the caller's verified domains with package counts, or the packages Shield has observed on one domain. With includeThreats, one domain's packages come back annotated with malware verdicts and CVEs, ranked by the domain's own traffic. Requires Shield login.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"days": {
"type": "integer",
"maximum": 365,
"minimum": 0,
"description": "Lookback window for threats mode. Default 30; 0 = all-time."
},
"domain": {
"type": "string",
"description": "One verified domain. Omit to list domains with package counts."
},
"includeThreats": {
"type": "boolean",
"description": "Annotate one domain's packages with verdicts and CVEs. Requires domain."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}shield_watchlist_status — Your Shield watchlist, pins, and blocks
Return the logged-in org's monitored packages, blocklist entries, and pin policies as Shield currently holds them. Requires Shield login.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}Prompts
3 advertised
audit_project_for_unpkg — Audit this project for UNPKG conversion
Guided workflow: audit the current project's dependencies and convert the ones that make sense.
- apply
- Set to "yes" to apply conversions after the audit; otherwise propose first.
convert_this_page — Convert this page to UNPKG imports
Wire a single no-build HTML page's bare imports to UNPKG, with validation and browser proof.
- page
- Path to the HTML file. Defaults to index.html.
find_browser_package — Find an npm package that works as a browser import
Search npm for a need and shortlist packages by browser readiness for direct UNPKG lookup.
- need
- What the package should do, e.g. 'a small markdown parser'. (required)
Resources
2 advertised
conversion-playbook — UNPKG conversion playbook
How to audit and convert a project to UNPKG file lookups.
unpkg://guidance/conversion-playbookversion-policy — UNPKG version specifier policy
Exact vs patch-level vs range specifiers and when to use each.
unpkg://guidance/version-policy90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 410 ms
- 95th percentile latency
- 410 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 410 ms · metadata changed · 14 tool(s), 2 resource(s), 0 resource template(s), 3 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http unpkg-mcp https://mcp.unpkg.com/mcpCodex
codex mcp add unpkg-mcp --url https://mcp.unpkg.com/mcpCursor
{
"mcpServers": {
"unpkg-mcp": {
"url": "https://mcp.unpkg.com/mcp"
}
}
}Cline
{
"mcpServers": {
"unpkg-mcp": {
"type": "streamableHttp",
"url": "https://mcp.unpkg.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"unpkg-mcp": {
"type": "http",
"url": "https://mcp.unpkg.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http unpkg-mcp https://mcp.unpkg.com/mcpClaude Desktop
https://mcp.unpkg.com/mcpWindsurf
{
"mcpServers": {
"unpkg-mcp": {
"serverUrl": "https://mcp.unpkg.com/mcp"
}
}
}Let your agent find its tools
Find servers like UNPKG MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.