Skip to main content
Glama
JGPAS

mcp-first-server

mcp-first-server

A Model Context Protocol (MCP) server built with the official MCP SDK, available both as a local stdio server (for Claude Desktop) and as a cloud-deployed HTTP server reachable over the network.

Live demo: https://mcp-first-server.onrender.com (note: free-tier hosting, first request after inactivity may take up to ~50s to wake the instance)

Tools

  • get_quote — returns a random motivational quote.

  • get_crypto_price — fetches the live USD price of any cryptocurrency (via CoinGecko).

Related MCP server: AetherTech MCP Server

Two ways to run this server

  • server.js — stdio transport, for local use with Claude Desktop or any MCP client that spawns a local process.

  • server-http.js — StreamableHTTP transport wrapped in Express, for cloud/network deployment (this is what's running at the live demo URL above). Listens on process.env.PORT.

Local setup

npm install
npm start          # runs server.js (stdio)
node server-http.js  # or run the HTTP version locally

Try the live HTTP endpoint

curl -X POST https://mcp-first-server.onrender.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Tech

Node.js, @modelcontextprotocol/sdk, Express, Zod for schema validation. Deployed on Render.

License

MIT — see LICENSE.

Author

Built by James Ganobi.

Available Tools

2 tools
get_crypto_priceGet Crypto PriceAInspect

Get the current USD price of a cryptocurrency by its id (e.g. bitcoin, ethereum, solana).

ParametersJSON Schema
NameRequiredDescriptionDefault
coinYesThe coin id, like 'bitcoin' or 'ethereum'.

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are present, so the description carries the full burden of behavioral disclosure. It communicates a read-only, live price lookup, but it does not disclose potential failure modes for invalid ids, response format, rate limits, or external data dependencies.

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?

The description is a single well-structured sentence with no filler. The action and object are front-loaded, and the examples are placed at the end where they add value without distracting.

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?

For a simple one-parameter read-only tool, the description is largely complete: it states the input, the output concept, and the currency. Minor gaps include lack of response-structure detail and no pointer to the sibling get_quote, but these are not critical for this low-complexity tool.

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 the schema already documents the coin parameter. The description reinforces the id format with additional examples and clarifies that the price is in USD, but it adds no fundamentally new parameter semantics.

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

Purpose4/5

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

The description uses a specific verb ('Get'), names the resource ('current USD price of a cryptocurrency'), and identifies the parameter ('by its id') with concrete examples. It is clear and unambiguous, though it does not explicitly differentiate itself from the sibling tool get_quote.

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

Usage Guidelines4/5

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

The description clearly implies when to use this tool: whenever a current USD cryptocurrency price is needed for a known coin id. However, it gives no exclusions and does not mention the sibling get_quote as an alternative.

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

get_quoteGet QuoteAInspect

Returns a random motivational quote. Use when the user wants inspiration or a quote.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the behavioral burden. It discloses that the quote is 'random' and that the tool simply returns content, implying a read-only operation. For an extremely simple zero-parameter tool, this is sufficient behavioral context.

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?

The description is one efficient sentence that front-loads the core behavior ('Returns a random motivational quote') and then immediately gives usage guidance. Every word earns its place.

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

Completeness5/5

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

For a no-parameter, no-output-schema tool, the description fully covers what the tool does and when to use it. There is no missing operational or contextual information an agent would need to call it correctly.

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

Parameters4/5

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

The tool has zero parameters, so there is nothing for the description to add beyond what the empty schema already indicates. The baseline of 4 applies because the schema covers all parameters (trivially) and no additional parameter meaning is needed.

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 clearly states the specific action ('Returns') and resource ('random motivational quote'). It is easily distinguished from the sibling tool, get_crypto_price, since one returns motivational quotes and the other returns cryptocurrency prices.

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

Usage Guidelines4/5

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

The description provides explicit guidance: 'Use when the user wants inspiration or a quote.' It does not explicitly name alternatives or exclusions, but the context is clear enough for an agent to select this tool versus its sibling.

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. 2 tool updatesv1.0.0
    • First observedget_crypto_price
    • First observedget_quote

TDQS

A3.7/5.0

Scored across 2 tools

Disambiguation5/5

The two tools serve completely different purposes: one returns motivational quotes and the other returns cryptocurrency prices. There is no overlap or ambiguity in what each tool does.

Naming Consistency5/5

Both tools follow the same get_<object> naming pattern, making the naming predictable and consistent. An agent can easily infer the action and target from each name.

Tool Count3/5

With only two tools, the server feels thin and borderline for a general-purpose toolset. Each tool is independently useful, but the small count limits the server's overall utility.

Completeness3/5

The tools are isolated, self-contained lookups with no obvious surrounding lifecycle, so completeness is hard to assess. There are no clear dead ends, but the surface is minimal and lacks a cohesive domain.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers