Deno MCP Server logo

Deno MCP Server

by Timtech4u

The Deno MCP Server allows LLMs like Claude to securely execute Deno TypeScript/JavaScript code with configurable permissions. It acts as a Model Context Protocol (MCP) server, enabling LLMs to interact with Deno runtime.

View on GitHub

Last updated: N/A

Deno MCP Server

A Model Context Protocol (MCP) server for executing Deno TypeScript/JavaScript code. This server allows LLMs like Claude to run Deno code securely with configurable permissions.

Features

  • Execute Deno TypeScript or JavaScript code
  • Configure permissions (net, read, write, env, run, etc.)
  • Enable/disable unstable features
  • Get Deno version information

Prerequisites

Before using this MCP server, ensure you have:

Installation

  1. Clone this repository:
git clone https://github.com/Timtech4u/deno-mcp.git
cd deno-mcp
  1. Install dependencies:
npm install
  1. Build the project:
npm run build

Configuration

For Claude Desktop

  1. Open your Claude Desktop configuration file:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
  2. Add the Deno MCP server configuration:

{
  "mcpServers": {
    "deno": {
      "command": "node",
      "args": [
        "/absolute/path/to/deno-mcp/dist/index.js"
      ],
      "disabled": false,
      "autoApprove": [
        "execute_deno_code",
        "check_deno_version"
      ]
    }
  }
}
  1. Replace /absolute/path/to/deno-mcp with the actual path where you cloned the repository.

  2. Restart Claude Desktop.

For Cline

  1. Open your Cline MCP settings file:

    • macOS: ~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
    • Windows: %APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json
  2. Add the Deno MCP server configuration:

{
  "mcpServers": {
    "deno": {
      "command": "node",
      "args": [
        "/absolute/path/to/deno-mcp/dist/index.js"
      ],
      "disabled": false,
      "autoApprove": [
        "execute_deno_code",
        "check_deno_version"
      ]
    }
  }
}
  1. Replace /absolute/path/to/deno-mcp with the actual path where you cloned the repository.

  2. Restart Cline or reload the window.

How to Use

Once configured, you can ask Claude to run Deno code in various ways. Here are some examples:

Basic Usage

You can run simple Deno code without any special permissions:

Can you run this Deno code for me?

console.log("Hello from Deno!");
console.log("Version:", Deno.version);
console.log("Current directory:", Deno.cwd());

With Network Permissions

To make HTTP requests, you need to grant network permissions:

Run this Deno code with network permissions:

async function fetchData() {
  const response = await fetch("https://jsonplaceholder.typicode.com/todos/1");
  const data = await response.json();
  console.log("Fetched data:", data);
}

await fetchData();

With File System Permissions

To read or write files, you need to grant file system permissions:

Run this Deno code with file system permissions:

const text = "Hello, Deno File System!";
await Deno.writeTextFile("./hello.txt", text);
console.log("File written successfully");

const content = await Deno.readTextFile("./hello.txt");
console.log("File content:", content);

With Multiple Permissions

You can combine multiple permissions:

Run this Deno code with network and file system permissions:

const response = await fetch("https://jsonplaceholder.typicode.com/todos/1");
const data = await response.json();
await Deno.writeTextFile("./todo.json", JSON.stringify(data, null, 2));
console.log("Todo data saved to file");

Using Deno Standard Library

You can use Deno's standard library:

Run this Deno code with network permissions:

import { serve } from "https://deno.land/[email protected]/http/server.ts";

const handler = (req) => new Response("Hello, Deno Server!");
console.log("HTTP server running on http://localhost:8000");
serve(handler, { port: 8000 });

Available Tools

execute_deno_code

Executes Deno TypeScript/JavaScript code.

Parameters:

  • code (string, required): The Deno code to execute
  • permissions (array of strings, optional): List of permissions to grant (e.g., "net", "read", "write", "env", "run", etc.)
  • unstable (boolean, optional): Whether to enable unstable features
  • typescript (boolean, optional): Whether the code is TypeScript (true) or JavaScript (false)

Example usage through Claude:

Can you run this Deno code with permissions for network and file system access?

const response = await fetch("https://api.github.com/users/denoland");
const data = await response.json();
await Deno.writeTextFile("./deno-github.json", JSON.stringify(data, null, 2));
console.log("GitHub data for Deno saved to file");

check_deno_version

Returns information about the installed Deno version.

Example usage through Claude:

Can you check what version of Deno I have installed?

Troubleshooting

Deno Not Found

If you see an error like "Deno is not installed", make sure Deno is installed and available in your system PATH.

Permission Errors

If your code fails with permission errors, make sure you're requesting the appropriate permissions:

  • Network requests: "net"
  • File system: "read" and/or "write"
  • Environment variables: "env"
  • Running subprocesses: "run"

Timeout Errors

The server has a 30-second timeout for code execution. If your code takes longer than that, it will be terminated.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT