Mcp Devtools — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Mcp Devtools (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
AI-native developer tools via [Model Context Protocol](https://spec.modelcontextprotocol.io). A production-grade MCP server that gives AI agents (Claude, Cursor, Copilot, Continue, ...) safe, scoped access to your local development environment.
The MCP ecosystem is full of single-purpose tutorials and vendor-locked adapters. There is no well-maintained, multi-tool, framework-agnostic, production-quality MCP package for everyday developer tooling.
mcp-devtools fills that gap with 14 tools, 3 MCP Resources, 4 MCP Prompts, a Plugin API, two transport modes (stdio + HTTP with auth), and an audit log — built on patterns refined in production at DailyBot.
npx @oscarmarin/mcp-devtoolsAdd it to Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"devtools": {
"command": "npx",
"args": ["-y", "@oscarmarin/mcp-devtools"]
}
}
}Or Cursor (~/.cursor/mcp.json): same block.
Create a mcp-devtools.json in your project root:
{
"transport": "http",
"port": 3333,
"auth": {
"token": "env:MCP_AUTH_TOKEN"
}
}Then start the server:
npx @oscarmarin/mcp-devtoolsThe MCP endpoint will be available at http://localhost:3333.
| Group | Tools |
|---|---|
| Filesystem | read_file, write_file, list_directory, search_files, get_file_info |
| Database | query_db, list_tables, describe_table |
| Process | run_command, read_logs, get_env, list_processes |
| OpenAPI | parse_openapi, call_api |
Per-tool reference: docs/tools/.
The server exposes read-only data via MCP Resources:
| URI | Description |
|---|---|
devtools://tools | Catalog of all registered tools with schemas |
devtools://server-info | Server version, transport, scope, tool count |
Curated prompt templates for common development workflows:
| Prompt | Description |
|---|---|
debug_error | Systematically debug an error using mcp-devtools tools |
code_review | Review a file for bugs, security issues, and code quality |
explore_codebase | Explore and understand a project's structure and conventions |
refactor_function | Refactor a function for readability, performance, or testability |
Extend mcp-devtools with custom tools — no fork required.
Config-based (load at startup):
{
"plugins": ["./my-tools.js", "@scope/mcp-plugin-foo"]
}Each plugin module default-exports an array of tool definitions:
import { defineTool } from "@oscarmarin/mcp-devtools";
import { z } from "zod";
export default [
defineTool({
name: "my_tool",
description: "Does something useful",
inputSchema: z.object({ input: z.string() }),
handler: async (args, config) => ({
ok: true,
data: { result: args.input.toUpperCase() },
}),
}),
];Configuration is loaded by cosmiconfig from mcp-devtools.json, .mcp-devtoolsrc, or the mcpDevtools key in package.json. See mcp-devtools.example.json and docs/configuration.md for the full schema.
Zero-config is supported: running npx @oscarmarin/mcp-devtools with no config uses schema defaults (RNF-05).
Four non-bypassable controls:
compared against config.scope. Symlinks that escape scope throw SCOPE_VIOLATION.
run_command only executes binaries whose basenameis in allowedCommands. Invocation uses spawn(file, args) (no shell), so shell-injection via the command argument is structurally impossible.
readOnly: true, all SQL is parsed andINSERT/UPDATE/DELETE/DROP/CREATE/GRANT are rejected. Queries run in BEGIN READ ONLY ... ROLLBACK on PostgreSQL.
auth.token is configured, every HTTP requestmust include Authorization: Bearer <token>. Comparison uses crypto.timingSafeEqual to prevent timing attacks.
Additional safety measures:
inputs, and result status.
get_env automatically masks values matching commonsecret patterns (SECRET, TOKEN, PASSWORD, KEY, etc.).
call_api only sends requests to hosts listedin the spec's servers array.
(100KB for commands, 1MB for files, 200 rows for queries).
git clone https://github.com/marin1321/mcp-devtools.git
cd mcp-devtools
npm install
npm run dev # tsup --watch
npm run test # vitest
npm run typecheck # tsc --noEmit
npm run lint # eslint .See CONTRIBUTING.md for the full workflow and CODE_OF_CONDUCT.md for community guidelines.
MIT © Oscar Humberto Marin Molina — oscarmarindev.com
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.