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 PriceBInspect

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

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It clearly states the tool returns the current USD price and that input is a coin id, but does not disclose output format, freshness, error behavior, or limitations such as USD-only pricing. This is adequate for a simple read-only lookup but leaves gaps.

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?

A single, front-loaded sentence with no filler. Every word contributes meaning, and the examples reinforce the parameter format.

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 one-parameter, no-output-schema lookup tool, the description provides enough to call it correctly: what to pass, what to expect in principle, and an example. It could mention the exact return shape, but that is a minor gap for such a simple 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 fully documents the coin parameter. The description adds concrete examples of valid ids, which is helpful but redundant with the schema; baseline 3 is appropriate.

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?

States a specific verb (get), resource (cryptocurrency), and scope (current USD price by id), with concrete examples. It is clear on its own but does not 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 Guidelines2/5

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

No guidance on when to use this tool versus get_quote, and no exclusions or alternative conditions are given. The usage context is only implied by the tool purpose.

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

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It does disclose that the quote is random and motivational, which is useful, but it does not mention failure modes, source behavior, or response shape. For a simple no-parameter tool this is acceptable but not detailed.

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 sentence with no wasted words. The primary behavior is stated first, followed by a brief usage cue, making it easy to parse.

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 tool with no parameters and no output schema, the description provides enough context for an agent to invoke it correctly. The lack of any mention of the return format is a minor gap, but the purpose is sufficiently clear.

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 parameter semantics are trivially satisfied. The description also confirms the tool requires no input, which matches the empty schema.

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 clearly states the tool returns a random motivational quote, specifying both the verb and the resource. It does not explicitly differentiate it from sibling get_crypto_price, but the subject matter is distinct enough that an agent can infer the difference.

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 gives a direct use case: when the user wants inspiration or a quote. It is clear about when to invoke the tool, though it does not explicitly mention when not to use it or compare it to get_crypto_price.

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. Dates show when Glama detected each change.

  1. 2 tool updatesv1.0.0
    • First observedget_crypto_price
    • First observedget_quote

TDQS

A3.7/5.0
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

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/JGPAS/mcp-first-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server