DEV Community

Francisco Perez
Francisco Perez

Posted on • Originally published at uncorreotemporal.com

Your MCP Server Scores 60/100 on Smithery: What It Means and How to Hit 100

What Is Smithery and Why Your Score Matters

Smithery is the primary directory for Model Context Protocol servers. When developers want to extend Claude Desktop, Cursor, Windsurf, or any MCP-compatible agent runtime with new capabilities, Smithery is where they look first. It lists hundreds of servers, supports one-click installation, and ranks results by a quality score.

That score is not cosmetic. It directly determines where your server appears in search results, whether it gets featured in curated lists, and whether developers trust it enough to wire it into their AI workflows. A server sitting at 60/100 is functional — but largely invisible to the developers who could use it.


The Anatomy of a 60/100 Score

Smithery's evaluation runs across several dimensions. A server at 60 typically has the basics covered — it installs, it runs, it exposes tools — but it's missing everything that makes it trustworthy and evaluable at a glance.

Here's what a 60/100 profile looks like in practice:

Category Status at 60
Tool schemas Present but thin — missing description, or detailed inputSchema per parameter
Server description Empty or a vague one-liner
System prompt Not defined
Package metadata name and version set, but no keywords, homepage, repository, or license
README Missing or a stub with no structured sections
Compatibility declaration Transport registered but not explicitly declared

The server runs. Everything else that helps a developer evaluate it in 30 seconds is missing.


Why a Good Smithery Score Matters for Adoption

Discovery. Your Smithery score MCP ranking directly influences where you appear in directory searches. A server at 60 gets pushed below servers at 85+ for identical queries.

Trust signal. A server with no description, no README, and no license reads as abandoned. The score is a visible proxy for "is this maintained?" — developers make that decision in seconds.

Client integration quality. Claude Desktop, Cursor, and Windsurf read tool descriptions and the server system prompt at runtime. A tool with no description forces the model to guess what it does, leading to incorrect invocations and poor UX.

The installation wizard. Smithery's one-click installer surfaces your README and smithery.yaml directly in its UI. A structured README walks developers through setup without leaving the page.

The MCP specification explicitly recommends rich tool descriptions as a protocol-level best practice. Smithery operationalizes this as a numeric score.


Checklist: From 60 to 100 on Smithery

1. Add description and full inputSchema to every tool

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";

const server = new McpServer({ name: "my-email-server", version: "1.0.0" });

server.tool(
  "create_inbox",
  {
    description: "Create a temporary email inbox for a target service. Returns the inbox address, inbox ID, and expiry timestamp.",
    inputSchema: {
      service_name: z.string().describe("The service this inbox is for (e.g. 'GitHub', 'Stripe')."),
      ttl_minutes: z.number().optional().describe("Inbox lifetime in minutes. Defaults to 30."),
    },
  },
  async ({ service_name, ttl_minutes }) => { /* implementation */ }
);
Enter fullscreen mode Exit fullscreen mode

Every description is injected into the model's context. If it's vague, the model will call your tool incorrectly.

2. Define a server-level system prompt

const server = new McpServer({
  name: "my-email-server",
  version: "1.0.0",
  description: "Programmable temporary email inboxes for AI agent workflows. Use this server to create disposable inboxes, wait for verification emails, extract OTP codes, and complete signup flows without human intervention.",
});
Enter fullscreen mode Exit fullscreen mode

3. Complete your package metadata

{
  "name": "@yourscope/my-email-server",
  "version": "1.0.0",
  "description": "Programmable temporary email inboxes for AI agents via MCP",
  "keywords": ["mcp", "email", "temporary-email", "ai-agents", "automation"],
  "homepage": "https://yourservice.com",
  "repository": { "type": "git", "url": "https://github.com/yourhandle/my-email-server" },
  "license": "MIT"
}
Enter fullscreen mode Exit fullscreen mode

4. Add a structured README

Three sections Smithery checks: Tools (table with name + description), Installation (Claude Desktop config snippet), Usage. All three need real content.

5. Publish to npm with --access public

npm publish --access public
Enter fullscreen mode Exit fullscreen mode

Scoped packages (@yourscope/) default to private — --access public is required. Use semver: 1.0.0 for stable, 0.x.y during development.

6. Add smithery.yaml

startCommand:
  type: stdio
  configSchema:
    type: object
    required: [apiKey]
    properties:
      apiKey:
        type: string
        description: Your API key from the service dashboard
  commandFunction: |-
    (config) => ({
      command: "npx",
      args: ["-y", "@yourscope/my-email-server"],
      env: { API_KEY: config.apiKey }
    })
Enter fullscreen mode Exit fullscreen mode

This enables Smithery's one-click installation wizard. Without it, the wizard may fail silently.


Real Case: uncorreotemporal.com

uncorreotemporal.com runs a Python MCP server in production — uncorreotemporal-mcp — built with FastMCP. At the time of writing it holds a 100/100 on Smithery, and its implementation shows what a well-structured listing looks like in practice.

The server exposes six tools, each covering a distinct step in an email automation workflow:

  • create_signup_inbox — creates a temporary inbox for a named service
  • wait_for_verification_email — polls until a matching email arrives (with subject/sender filters)
  • get_latest_email — reads the full content of the most recent message
  • extract_otp_code — parses a 4–8 digit OTP from an email body
  • extract_verification_link — extracts the most likely verification URL with optional domain filtering
  • complete_signup_flow — chains inbox creation, polling, and extraction in a single call

Each tool carries a description written from the model's perspective. The pyproject.toml includes name, description, keywords, license, homepage, and repository. Three transports declared: stdio, streamable-http, and sse.

The key pattern: tool descriptions read like agent instructions, not function signatures. That distinction is what separates a 60 from a 100 on Smithery.


Check Your Score and Act

Go to https://smithery.ai/server/<your-package-name> right now. The three fastest wins:

  1. Add description to every tool — 5–10 minutes per tool, highest score impact
  2. Complete package metadata — 10 minutes, covers multiple categories at once
  3. Add smithery.yaml — 15 minutes, unlocks the installation wizard

If you're building agent workflows that need programmable email — inbox creation, OTP extraction, verification link parsing — the server at uncorreotemporal.com covers all of it with a single MCP integration. Connect it to Claude Desktop or Cursor in minutes, and your agents can complete signup flows without any human involvement.

Top comments (0)