EasySAFE
Absurdly easy Model Context Protocol Servers in Typescript
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
EasyMCP is usable but in beta. Please report any issues you encounter.
EasyMCP is the simplest way to create Model Context Protocol (MCP) servers in TypeScript.
It hides the plumbing, formatting, and other boilerplate definitions behind simple declarations.
Easy MCP allows you to define the bare minimum of what you need to get started. Or you can define more complex resources, templates, tools, and prompts.
Features
- Simple Express-like API: EasyMCP provides a high-level, intuitive API. Define Tools, Prompts, Resources, Resource Templates, and Roots with calls similar to defining endpoints in ExpressJS. Every possible parameter that could be optional is optional and hidden unless you need it.
- Experimental Decorators API: Automagically infers tool, prompt, and resource arguments. No input schema definition required!
- Context Object: Access MCP capabilities like logging and progress reporting through a context object in your tools.
- Great Type Safety: Better DX and fewer runtime errors.
Beta Limitations
- No support for MCP sampling, yet
- No support for SSE, yet
- No resource update notifications, yet
- Prompts technically accept inputs, but the Typescript SDK suggests they can't. So this functionality feels unfinished.
Installation
To install EasyMCP, run the following command in your project directory:
bun install
Quick Start with (Experimental) Decorators API
Also see examples/express-decorators.ts or run bun start:decorators
EasyMCP's decorator API is dead simple and infers types and input configuration automatically.
But it's experimental and may change or have not-yet-discovered problems.
import EasyMCP from "./lib/EasyMCP";
import { Tool, Resource, Prompt } from "./lib/experimental/decorators";
class MyMCP extends EasyMCP {
@Resource("greeting/{name}")
getGreeting(name: string) {
return `Hello, ${name}!`;
}
@Prompt()90ae109273efOBSERVED · 2026-10-06Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.
claude mcp add easy-mcp -- npx -y [email protected]
{
"mcpServers": {
"easy-mcp": {
"command": "npx",
"args": [
"-y",
"[email protected]"
]
}
}
}Exposed tools (7)
7 read · 0 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
age | read | User |
configured-prompt | read | A prompt with a name and description |
customPrompt | read | A custom prompt with multiple parameters |
mockedResourceTemplate | read | A mocked resource template |
name | read | The name of the thing to prompt |
testPrompt | read | A test prompt |
testTool | read | A test tool |
Trust audit
SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | WARN |
| L1 | Static analysis of the code | PASS |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (5 observation(s))
- Network
- none-observed
- Shell
- none-observed
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (9)
bun.lockb
.releaserc.json
import type { FunctionConfig, ParameterMetadata } from "../../types";import type { PromptConfig, PromptDefinition } from "../../../types";} from "../../../types";
import type { FunctionConfig, ToolConfig } from "../../../types";import type { Context } from "../../Context";return Uint8Array.from(atob(content.blob), (c) => c.charCodeAt(0));
@modelcontextprotocol/sdk, lodash.camelcase, path-to-regexp, reflect-metadata, @anatine/zod-mock, @faker-js/faker, @semantic-release/changelog, @semantic-release/git
Gates applied: no_behavioural_pass.
90ae109273effull audit observations/trust-audit/mcp-server/zcaceres__easy.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-06 | 90ae109273ef | SAFE | B | 89 | first audit |
Questions
What is the Easy MCP server?
Absurdly easy Model Context Protocol Servers in Typescript
What tools does Easy expose?
7 in total: 7 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is Easy safe to connect to an agent?
The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B.
What credentials does Easy need?
No credential environment variables were found in its source, so it appears to need none.
How does Easy run?
It speaks stdio, so it runs as a local process your client starts. It is published on npm as easy-mcp at 1.0.1.
How current is this page?
The grade is for one exact copy of the source (90ae109273ef), read on 2026-10-06. The repository is watched and re-audited when it changes.