Server definition
- Hash
- sha256:9c315b18cb5d14b62e7b094200a9874ca4a29f4a9f7c7f9b2a2c766adebe56a1
- What it is
- What a remote MCP server returned when asked what it offers: 8 tools
The blob, as servednamed by its sha256
{
"instructions": "Moltline's Creator Studio: 20 content/creative persona-skill products (blogging, brand voice, copywriting, video, social, newsletters and more). Free: list_products, get_free_skill, analyze_writing. Premium: get_full_product, get_full_skill.",
"tools": [
{
"description": "Analyze a draft for readability, passive voice, cliches, and hedging. FREE.\n\nAlso measures sentence variety and keyword density, and produces a\nprioritized fix list. Typical input {\"text\": \"<your draft>\"} returns\n{\"readability_grade\": 9.2, \"passive_voice_count\": N, \"cliches_found\":\n[...], \"hedging_words\": [...], \"sentence_count\": N,\n\"avg_words_per_sentence\": N, \"top_repeated_words\": [...],\n\"priority_fixes\": [\"...\"]}.\n\nUse on body prose to find readability and style problems. Not for ranking\ntitles (headline_analyzer) and not for platform limits\n(social_length_check). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"empty text\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"text": {
"description": "The draft to analyze — at least one full sentence; plain text,\nany length.",
"type": "string"
}
},
"required": [
"text"
],
"type": "object"
},
"name": "analyze_writing",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Load a product's free gateway skill with its complete instructions. FREE.\n\nTypical input {\"slug\": \"brand-voice\"} returns {\"slug\": \"brand-voice\",\n\"skill\": \"<skill name>\", \"instructions\": \"<full skill text>\"}.\n\nReturns exactly one skill - the product's free gateway skill - chosen\nautomatically from the slug, with no plan required. Use when the caller\nwants usable instructions immediately. Not for the product's other skills:\nthose are named and need get_full_skill with a skill_name, which requires\na paid plan. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"unknown slug '<value>'. Use list_products.\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"slug": {
"description": "Product slug exactly as returned by list_products,\ne.g. \"brand-voice\".",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_free_skill",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Load one product in full: its persona plus every paid skill. PREMIUM (license).\n\nTypical input {\"slug\": \"brand-voice\"} returns {\"slug\": ..., \"name\": ...,\n\"persona\": \"<persona text>\", \"skills\": [{\"name\": ..., \"instructions\":\n...}, ...], \"free_skill\": {...}}.\n\nReturns persona plus every skill for one product. Use when the caller\nwants the whole product. Not for a single skill (get_full_skill) and not\nfor a free look, which list_products and get_free_skill provide with no\nplan. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"unknown slug '<value>'\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"slug": {
"description": "Product slug exactly as returned by list_products,\ne.g. \"brand-voice\".",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_full_product",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Load one paid skill's complete instructions from a product. PREMIUM (license).\n\nTypical input {\"slug\": \"brand-voice\", \"skill_name\": \"Voice Audit\"}\nreturns {\"slug\": ..., \"skill\": ..., \"instructions\": \"<full skill text>\"}.\n\nReturns one named skill, selected by skill_name. Use when the caller wants\none specific paid skill. Not for the free gateway skill, which\nget_free_skill returns with no plan, and not for every skill at once\n(get_full_product). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"unknown slug '<value>'\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"skill_name": {
"description": "Exact skill name as listed in that product's \"skills\"\narray from list_products.",
"type": "string"
},
"slug": {
"description": "Product slug exactly as returned by list_products.",
"type": "string"
}
},
"required": [
"slug",
"skill_name"
],
"type": "object"
},
"name": "get_full_skill",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Score and rank up to 20 headlines, best first. FREE.\n\nScores 0-100 on length, power/emotion words, numbers, structure, and\nclarity. Typical input {\"headlines\": [\"7 Mistakes New Writers Make\",\n\"On Writing\"]} returns {\"ranked\": [{\"headline\": ..., \"score\": 85,\n\"notes\": [\"good length\", \"contains number\"]}, ...]}.\n\nUse when several title options need ranking. Not for email subject lines,\nwhich the outbound server's subject_line_scorer judges against\ndeliverability signals, and not for body prose (analyze_writing). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"}. Every call is read-only and idempotent, so after correcting the input it is always safe to retry.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"headlines": {
"description": "List of candidate headlines as plain strings; only the\nfirst 20 are scored.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"headlines"
],
"type": "object"
},
"name": "headline_analyzer",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "List every product in the Creator Studio line with its included skills. FREE.\n\nTakes no arguments. Returns a list of 20 product objects, each\n{\"slug\": \"brand-voice\", \"name\": ..., \"tagline\": ..., \"skills\": [\"Skill\nA\", ...], \"free_skill\": \"Gateway Skill Name\"}. Use the returned slug\nvalues with get_free_skill, get_full_product, or get_full_skill.\n\nReturns metadata only - no persona text and no skill instructions. Use\nwhen the caller wants to see what this server covers. Not for keyword\nsearch across the whole 138-product catalog, which the catalog server's\nsearch_catalog does, and not for instructions the caller can act on\n(get_free_skill). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"}. Every call is read-only and idempotent, so after correcting the input it is always safe to retry.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "list_products",
"outputSchema": {
"properties": {
"result": {
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Estimate reading and speaking time plus basic content stats. FREE.\n\nTypical input {\"text\": \"<your article>\"} returns {\"words\": 1200,\n\"reading_minutes\": 5.2, \"speaking_minutes\": 8.6, \"paragraphs\": 14,\n\"fit\": \"newsletter/blog\"}.\n\nUse when length and pacing are the question. Not for writing quality or\ngrade level (analyze_writing). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"}. Every call is read-only and idempotent, so after correcting the input it is always safe to retry.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"text": {
"description": "The content to measure, plain text.",
"type": "string"
},
"wpm": {
"default": 230,
"description": "Silent reading speed in words per minute; values below 60 are\ntreated as 60. Default 230.",
"type": "integer"
}
},
"required": [
"text"
],
"type": "object"
},
"name": "reading_time",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Check a post against every major platform's length limit at once. FREE.\n\nCovers X, LinkedIn posts and headlines, Instagram captions, Threads,\nYouTube titles, and meta descriptions. Typical input {\"text\": \"<post>\"}\nreturns {\"chars\": N, \"platforms\": {\"x_post\": {\"limit\": 280, \"fits\":\ntrue, \"over_by\": 0}, ...}}.\n\nUse before posting, to catch truncation. Not for readability\n(analyze_writing) and not for reading duration (reading_time). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"}. Every call is read-only and idempotent, so after correcting the input it is always safe to retry.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"text": {
"description": "The post or caption text to check, exactly as it would be\npublished.",
"type": "string"
}
},
"required": [
"text"
],
"type": "object"
},
"name": "social_length_check",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:9c315b18cb5d14b62e7b094200a9874ca4a29f4a9f7c7f9b2a2c766adebe56a1 | sha256sum