I just published an MCP server that gives Claude, GPT-4, or any MCP-compatible LLM full access to JSR - the JavaScript Registry. Here's how to search packages, manage scopes, and even publish new versions, all through natural language.
What This Package Does
The @wyattjoh/jsr-mcp
package is a Model Context Protocol server that exposes the entire JSR API to LLMs. It implements all 50+ endpoints from the JSR API specification, from simple package searches to complex authorization flows.
Now available on JSR: jsr.io/@wyattjoh/jsr-mcp
Getting Started with Claude Desktop
Let me walk you through the setup. First, make sure you have Claude Desktop (version 0.7.0 or later).
Edit your Claude Desktop configuration:
1# On macOS
2code ~/Library/Application\ Support/Claude/claude_desktop_config.json
Add the JSR server to your MCP servers:
1{
2 "mcpServers": {
3 "jsr": {
4 "command": "deno",
5 "args": [
6 "run",
7 "--allow-env=JSR_API_URL,JSR_REGISTRY_URL,JSR_API_TOKEN",
8 "--allow-net=api.jsr.io,jsr.io",
9 "jsr:@wyattjoh/jsr-mcp"
10 ]
11 }
12 }
13}
Restart Claude Desktop. The MCP connection indicator will show it's active.
What You Can Actually Do
Once connected, you can ask Claude things like:
"Search for testing packages on JSR"
Claude will call the search tool and return results:
1await jsr_search_packages({
2 query: "testing",
3 limit: 10
4});
5// Returns packages like @std/testing, @mock/test, etc.
"Show me all versions of @oak/oak"
1await jsr_list_package_versions({
2 scope: "oak",
3 name: "oak"
4});
5// Returns all published versions with metadata
"What's the quality score of @std/fs?"
1await jsr_get_package_score({
2 scope: "std",
3 name: "fs"
4});
5// Returns documentation, compatibility, and quality metrics
Public vs Authenticated Operations
The server works in two modes:
Public Mode (No Token Required)
Most read operations work without authentication:
1{
2 "mcpServers": {
3 "jsr": {
4 "command": "deno",
5 "args": [
6 "run",
7 "--allow-env=JSR_API_URL,JSR_REGISTRY_URL,JSR_API_TOKEN",
8 "--allow-net=api.jsr.io,jsr.io",
9 "jsr:@wyattjoh/jsr-mcp"
10 ]
11 }
12 }
13}
This gives you:
- Package search and discovery
- Version information
- Dependency analysis
- User and scope lookups
- Registry statistics
Authenticated Mode (With API Token)
For package management, you need a JSR API token:
1{
2 "mcpServers": {
3 "jsr": {
4 "command": "deno",
5 "args": [
6 "run",
7 "--allow-env=JSR_API_URL,JSR_REGISTRY_URL,JSR_API_TOKEN",
8 "--allow-net=api.jsr.io,jsr.io",
9 "jsr:@wyattjoh/jsr-mcp"
10 ],
11 "env": {
12 "JSR_API_TOKEN": "your-jsr-api-token"
13 }
14 }
15 }
16}
Get your token at jsr.io/account/tokens.
This unlocks:
- Creating and managing scopes
- Publishing packages and versions
- Managing scope members
- Updating package metadata
- Yanking versions
The Complete Tool Arsenal
The server exposes 50+ tools covering every JSR operation. Here are the categories:
Package Discovery & Information
jsr_search_packages
- Full-text package searchjsr_get_package
- Detailed package informationjsr_get_package_metadata
- Registry metadatajsr_get_package_score
- Quality metricsjsr_list_packages
- Browse all packages
Version Management
jsr_list_package_versions
- All versions of a packagejsr_get_package_version
- Specific version detailsjsr_create_package_version
- Publish new versionsjsr_update_package_version
- Yank versions
Dependency Analysis
jsr_get_package_dependencies
- What a package depends onjsr_get_package_dependents
- What depends on a package
Scope Operations
jsr_create_scope
- Create new scopesjsr_update_scope
- Configure scope settingsjsr_list_scope_packages
- Packages in a scopejsr_list_scope_members
- Scope collaborators
User Management
jsr_get_current_user
- Your JSR profilejsr_get_user_scopes
- User's scope membershipsjsr_accept_scope_invite
- Join scopesjsr_add_scope_member
- Invite collaborators
Real-World Examples
Here's what people are using this for:
Package Discovery
- "Find all Deno-compatible HTTP servers"
- "What testing frameworks support both Node and Deno?"
- "Show me packages by the Deno team"
Dependency Research
- "What packages depend on @std/fs?"
- "Show me the dependency tree for @oak/oak version 12.0.0"
- "Find packages with zero dependencies"
Quality Analysis
- "Compare quality scores of all markdown parsers"
- "Which @std packages have the best documentation?"
- "Find packages with 100% browser compatibility"
Package Management (with token)
- "Create a new scope for my company"
- "Publish version 2.0.0 of my package"
- "Add john@example.com as admin to @mycompany scope"
- "Yank the broken 1.2.3 version"
Publishing Packages Through Claude
With authentication, Claude can publish packages for you:
1// Claude can execute this flow:
2await jsr_create_scope({
3 scope: "mycompany",
4 description: "Corporate packages"
5});
6
7await jsr_create_package({
8 scope: "mycompany",
9 package: "utils"
10});
11
12await jsr_create_package_version({
13 scope: "mycompany",
14 name: "utils",
15 version: "1.0.0",
16 configPath: "deno.json",
17 tarballPath: "./dist/package.tar.gz"
18});
You prepare the tarball, Claude handles the JSR API calls.
Advanced: Authorization Flows
The server even supports OAuth-style authorization flows:
1// Start authorization
2const auth = await jsr_create_authorization({
3 challenge: "random-string",
4 permissions: [{ scope: "package:write" }]
5});
6
7// User approves in browser
8await jsr_approve_authorization({
9 code: auth.code
10});
11
12// Exchange for token
13const token = await jsr_exchange_authorization({
14 exchangeToken: auth.exchangeToken,
15 verifier: "challenge-verifier"
16});
This enables building custom JSR integrations through Claude.
Local Development
Clone and run locally:
1git clone https://github.com/wyattjoh/jsr-mcp
2cd jsr-mcp/packages/jsr-mcp
3
4# Or build a binary
5deno task build
6./jsr-mcp
Configuration Options
Three environment variables control the server:
JSR_API_TOKEN
- Your authentication tokenJSR_API_URL
- Custom API endpoint (default: https://api.jsr.io
)JSR_REGISTRY_URL
- Custom registry URL (default: https://jsr.io
)
What's Next
Some ideas for future enhancements:
- Bulk operations for managing multiple packages
- Package migration tools from npm
- Automated compatibility testing
- Package analytics and insights
- CI/CD integration helpers
Try It Now
- Install Claude Desktop or Claude Code
- Add the configuration above
- Start exploring JSR through natural language
Or use it programmatically:
1deno add @wyattjoh/jsr-mcp
The full source is at github.com/wyattjoh/jsr-mcp.
Have questions or feature requests? Open an issue on GitHub or reach out on BlueSky @wyattjoh.