Atlas / MCP servers / zcaceres / Easy

EasySAFE

mcp/zcaceres/easy

Absurdly easy Model Context Protocol Servers in Typescript

Verdict
SAFE
Grade
B
Trust score
89 /100
Exposed tools
7 7r · 0w · 0d
Transport
stdio
License
MIT
Stars
196
01

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()
Read from source at commit 90ae109273efOBSERVED · 2026-10-06
02

Connect

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-code
claude mcp add easy-mcp -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "easy-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ]
    }
  }
}
03

Exposed tools (7)

7 read · 0 write · 0 destructive.

ToolRiskDescription
agereadUser
configured-promptreadA prompt with a name and description
customPromptreadA custom prompt with multiple parameters
mockedResourceTemplatereadA mocked resource template
namereadThe name of the thing to prompt
testPromptreadA test prompt
testToolreadA test tool
04

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.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codePASS
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (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)

MEDIUMInventory / provenance · inv.binary · CWE-1104
bun.lockb
bun.lockb
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.hidden_file · CWE-1104
.releaserc.json
.releaserc.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
lib/experimental/MagicConfig.ts:2
import type { FunctionConfig, ParameterMetadata } from "../../types";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
lib/experimental/decorators/Prompt.ts:1
import type { PromptConfig, PromptDefinition } from "../../../types";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
lib/experimental/decorators/Resource.ts:6
} from "../../../types";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
lib/experimental/decorators/Tool.ts:1
import type { FunctionConfig, ToolConfig } from "../../../types";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
lib/experimental/decorators/Tool.ts:2
import type { Context } from "../../Context";
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
lib/Context.ts:54
return Uint8Array.from(atob(content.blob), (c) => c.charCodeAt(0));
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/sdk, lodash.camelcase, path-to-regexp, reflect-metadata, @anatine/zod-mock, @faker-js/faker, @semantic-release/changelog, @semantic-release/git
Why it matters. 11 dependency range(s) float
Fix. pin exact versions or ship a lockfile

Gates applied: no_behavioural_pass.

Audited 2026-10-06 · audit v0.4.1 · source sha 90ae109273effull audit observations/trust-audit/mcp-server/zcaceres__easy.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-0690ae109273efSAFEB89first audit
06

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.

Advertisement