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 PriceBInspect
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?
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.
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.
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.
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.
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.
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.
| 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 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.
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.
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.
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.
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.
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.
2 tool updates
v1.0.0- First observed
get_crypto_price - First observed
get_quote
TDQS
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 gradedqualityCmaintenanceA 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.2251MIT
- 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.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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