A Deno monorepo containing packages for JSR (JavaScript Registry) access:
- @wyattjoh/jsr - Core library for JSR API access
 - @wyattjoh/jsr-mcp - Model Context Protocol (MCP) server for LLM integration
 
- Search packages across the JSR registry
 - Get package details, versions, and dependencies
 - Manage scopes and package publishing
 - Handle member invitations and permissions
 - Access registry statistics and metadata
 - Full authentication support for write operations
 
- Deno 2.x or later
 - Network access to JSR API
 - JSR API token for authenticated operations (optional)
 
Core library for accessing JSR API:
deno add @wyattjoh/jsrimport { getPackage, searchPackages } from "@wyattjoh/jsr";
const results = await searchPackages({ query: "react" });
const pkg = await getPackage("deno", "std");MCP server for LLM integration:
# Run directly from JSR
deno run --allow-net --allow-env jsr:@wyattjoh/jsr-mcp
# Or install globally
deno install --global --allow-net --allow-env -n jsr-mcp jsr:@wyattjoh/jsr-mcpFor Claude Desktop app integration, add this to your claude_desktop_config.json:
{
  "mcpServers": {
    "jsr": {
      "command": "deno",
      "args": [
        "run",
        "--allow-net",
        "--allow-env",
        "jsr:@wyattjoh/jsr-mcp"
      ],
      "env": {
        "JSR_API_TOKEN": "your-api-token-here"
      }
    }
  }
}- Clone this repository
 - Install dependencies:
deno cache packages/*/mod.ts - Run the server:
deno run --allow-net --allow-env packages/jsr-mcp/mod.ts
 
The MCP server provides 40 tools for comprehensive JSR access:
- jsr_search_packages - Search for packages
 - jsr_get_package - Get package details
 - jsr_get_package_version - Get specific version details
 - jsr_list_package_versions - List all versions
 - jsr_get_package_metadata - Get package metadata
 - jsr_get_package_dependencies - Get dependencies
 - jsr_get_package_score - Get package quality score
 - jsr_get_package_dependents - Find dependent packages
 - jsr_create_package - Create new package (requires auth)
 - jsr_update_package - Update package (requires auth)
 - jsr_delete_package - Delete package (requires auth)
 
- jsr_create_package_version - Upload new version (requires auth)
 - jsr_update_package_version - Update version, e.g., yank (requires auth)
 
- jsr_get_scope - Get scope details
 - jsr_list_scope_packages - List packages in a scope
 - jsr_create_scope - Create new scope (requires auth)
 - jsr_update_scope - Update scope settings (requires auth)
 - jsr_delete_scope - Delete scope (requires auth)
 
- jsr_list_scope_members - List scope members
 - jsr_add_scope_member - Invite member (requires auth)
 - jsr_update_scope_member - Update member role (requires auth)
 - jsr_remove_scope_member - Remove member (requires auth)
 - jsr_list_scope_invites - List pending invites
 - jsr_delete_scope_invite - Delete scope invite (requires auth)
 - jsr_accept_scope_invite - Accept invite (requires auth)
 - jsr_decline_scope_invite - Decline invite (requires auth)
 
- jsr_get_current_user - Get authenticated user
 - jsr_get_current_user_scopes - Get user's scopes
 - jsr_get_current_user_scope_member - Get user's membership in a scope
 - jsr_get_current_user_invites - Get user's pending invites
 - jsr_get_user - Get user details
 - jsr_get_user_scopes - Get user's scopes
 
- jsr_list_packages - List all registry packages
 - jsr_get_stats - Get registry statistics
 
- jsr_create_authorization - Start authorization flow (requires auth)
 - jsr_get_authorization_details - Get authorization details
 - jsr_approve_authorization - Approve authorization (requires auth)
 - jsr_deny_authorization - Deny authorization (requires auth)
 - jsr_exchange_authorization - Exchange code for token (requires auth)
 
- jsr_get_publishing_task - Get publishing task status
 
// Search for packages
jsr_search_packages({ query: "react", limit: 10 });
// Get package details
jsr_get_package({ scope: "deno", name: "std" });
// List versions with pagination
jsr_list_package_versions({
  scope: "deno",
  name: "std",
  limit: 20,
  page: 1,
});
// Get dependencies for a specific version
jsr_get_package_dependencies({
  scope: "deno",
  name: "std",
  version: "1.0.0",
});
// Create a new scope (requires authentication)
jsr_create_scope({
  scope: "my-org",
  description: "My organization's packages",
});- Read operations do not require authentication
 - Write operations require a valid JSR API token
 - The server only accesses the JSR API endpoints
 - No local file system access beyond reading environment variables
 
This is a Deno workspace monorepo. All commands run from the root affect all packages.
# Clone the repository
git clone https://github.com/wyattjoh/jsr-mcp.git
cd jsr-mcp
# Cache dependencies
deno cache packages/*/mod.ts
# Format all code
deno fmt
# Lint all packages
deno lint
# Type check all packages
deno check packages/jsr/mod.ts packages/jsr-mcp/mod.ts
# Run tests
deno test --allow-net packages/
# Run MCP server locally (with watch mode)
deno run --allow-read --allow-write --allow-env --allow-run --allow-net --watch packages/jsr-mcp/mod.ts
# Run MCP server in production
deno run --allow-read --allow-write --allow-env --allow-run --allow-net packages/jsr-mcp/mod.ts
# Build binary
cd packages/jsr-mcp
deno compile --allow-read --allow-write --allow-env --allow-run --allow-net --output=jsr-mcp mod.ts
# Publish packages (CI/CD)
deno publish# Work on @wyattjoh/jsr
cd packages/jsr
deno test --allow-net
# Work on @wyattjoh/jsr-mcp
cd packages/jsr-mcp
deno run --allow-net --allow-env mod.tsMIT