Skip to main content
Glama
GwylimWilliams

mcpbase

mcp-base

The template every MCP server here is instantiated from: a stdio server with one registerTools seam, structured output, and annotation presets so a tool cannot be written without carrying its safety hints.

It is also the cheap place to retire SDK unknowns. The get_datetime example exists to exercise the SDK v2 surface end to end — handshake, annotations, structured output, schema rejection — so the servers that matter don't discover those on their own.

Status

Tag

What it is

v0.1.0 (current)

Proving ground — scaffold, example tool, tool-level tests

v0.2.0

The backport — single subprocess seam, root/path validation, security test suite

Still to land before v0.1.0 is tagged: the 1MCP wiring proof, scripts/instantiate.ts, the SDK-drift test and dependabot. The design notes live in Trilium.

Related MCP server: MCP TypeScript Starter

Requirements

Node ≥ 22. CI runs 22 and 24; .node-version pins 24 for local mise users.

Develop

npm ci
npm run build
npm test

npm test runs vitest against src/ through the SDK's own client over an in-memory transport, so no build and no spawned process are involved. npm run build is only needed for the bin entry and for npx over GitHub.

Instantiate

  1. Use this template on GitHub — a fork would share history, which is not what you want.

  2. Run the instantiation script. It substitutes __name__ and reports every replacement point it could not infer; the substitution contract lives in src/placeholders.ts. Until the script lands, substitute those points by hand.

  3. Delete the example: src/tools/get-datetime.ts, its line in src/tools/index.ts, and its tests in test/.

Then add the first real tool — see AGENTS.md for the checklist.

Register with 1MCP

"mcpbase": {
  "command": "npx",
  "args": ["-y", "github:GwylimWilliams/mcp-base"],
  "tags": ["test"]
}

The prepare script builds on install, which is what makes npx -y github:… work without a published package.

When a server takes scoped roots, they are passed as CLI args after the repo — never cwd, so the scoping holds whatever directory the gateway happens to run in.

The rules

License

MIT.

Available Tools

1 tool
get_datetimeGet date and timeA
Read-only

Current date and time in an IANA timezone, optionally shifted by whole days. The iso field is the wall clock in that zone, so its offset makes the instant unambiguous; unix is the same instant as epoch seconds, and human is a localized rendering.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoAdds a localized "human" string when set to "human".iso
timezoneNoIANA timezone name, e.g. "UTC", "Europe/London", "Asia/Tokyo".UTC
offsetDaysNoWhole days to shift the result, relative to now.

Output Schema

ParametersJSON Schema
NameRequiredDescription
isoYesISO 8601 wall-clock time in the requested zone, carrying that zone's UTC offset.
unixYesSeconds since the Unix epoch.
humanNoLocalized rendering; present only when format is "human".
timezoneYesCanonical IANA name of the resolved zone.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds useful behavioral context by explaining that iso includes an offset that disambiguates the instant, that unix is the same instant as epoch seconds, and that human is a localized rendering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose and optional shift, followed by precise output-format semantics. Every clause contributes meaningful information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although an output schema exists, the description still usefully clarifies the meaning of the iso, unix, and human fields. Combined with the annotation safety hints and complete parameter schema, an agent has enough context to invoke the tool correctly; only explicit usage guidance is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are fully documented in the schema itself. The description restates the timezone and whole-day shift concepts but adds no syntax or format details beyond what the schema already provides, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and scope: current date and time, in an IANA timezone, optionally shifted by whole days. It is immediately clear what the tool returns and how its output is affected by parameters.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There are no sibling tools and no alternatives to distinguish from, but the description does not explicitly state when to use this tool versus other time-related approaches. Usage is strongly implied by the resource and parameter set, which is adequate for a simple utility.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev0.1.0
    • First observedget_datetime

TDQS

A4/5.0

Scored across 1 tool

Disambiguation5/5

There is only one tool, so there is no possibility of misselection or overlapping purpose. Its purpose (returning the current datetime in a given timezone) is clearly stated.

Naming Consistency5/5

A single tool using a clean verb_noun snake_case name (get_datetime). No inconsistency is possible with one tool.

Tool Count3/5

The server is scoped narrowly to datetime retrieval, so one tool is defensible, but the surface is very thin. A single trivial operation sits at the borderline of usefulness for an MCP server.

Completeness3/5

It handles the core case (current time in an IANA zone, with day offsets and multiple renderings), but there is no parsing, conversion between zones, duration/diff, or formatting tool. Agents needing anything beyond 'now' will hit a dead end.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A production-grade TypeScript template for building Model Context Protocol (MCP) servers with declarative tools/resources, authentication, storage abstraction, and support for both local and edge deployment. Provides example echo tools and resources to demonstrate MCP server development patterns.
    86 npm
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    A production-ready Model Context Protocol server template in TypeScript that enables building MCP servers with dynamic tool registration, dual transport (stdio + HTTP), and pluggable authentication.
    6 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A minimal TypeScript MCP server template with example tool, Zod validation, stdio transport, and dotenv setup.
    37 npm
    MIT