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 onprocess.env.PORT.
Local setup
npm install
npm start # runs server.js (stdio)
node server-http.js # or run the HTTP version locallyTry 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 toolsget_crypto_priceGet Crypto PriceAInspect
Get the current USD price of a cryptocurrency by its id (e.g. bitcoin, ethereum, solana).
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | The coin id, like 'bitcoin' or 'ethereum'. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
2 tool updates
v1.0.0- First observed
get_crypto_price - First observed
get_quote
TDQS
Scored across 2 tools
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.
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.
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.
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
Related MCP Connectors
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
MCP server exposing the Backtest360 engine API as tools for AI agents.
QuLab MCP remote server (Streamable HTTP) for computational science and lab tools.
MCP server for querying Forkast documentation
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA production-ready MCP server providing file, system, math, and text utilities through a simple CLI client.-
- FlicenseBqualityBmaintenanceA production-ready MCP server offering text analysis tools, an in-memory key-value store, and system info resources with support for both stdio and HTTP transports.4-
- AlicenseNot gradedqualityBmaintenanceMCP server that provides tools to retrieve weather information from a weather API, supporting both local stdio and remote Streamable HTTP transports.280 npm1MIT
- FlicenseNot gradedqualityCmaintenanceA production-oriented MCP server exposing tools for weather, currency conversion, text statistics, and server introspection, with auto-discovery, rate limiting, and API key auth.-