thinkhard.si prompt tools
Search 300+ expert prompt templates for work, grade a prompt out of 10, and price AI models.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"prompt-tools": {
"url": "https://thinkhard.si/mcp"
}
}
}Remote endpoints
https://thinkhard.si/mcpstreamable-httpWhat it can do
Tool inventory
Tools (5)
🟢search_prompts(query, collection, model, limit)
Find ready-made, expert prompt templates for a work task in the thinkhard.si repository (300+ prompts for email, meetings, presentations, job search, marketing, sales, support, HR, finance, legal, spreadsheets, research and more). Use it whenever the user wants to write, plan, summarize, analyze or draft something at work, before writing a prompt from scratch. Then call get_prompt with the slug.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "What the user wants to do, in plain words, for example \"cover letter\" or \"summarize a long contract\"."
},
"collection": {
"type": "string",
"enum": [
"office",
"writing",
"marketing",
"careers",
"sales",
"support",
"management",
"people",
"projects",
"research",
"data",
"finance",
"legal",
"operations",
"smallbiz",
"education",
"product",
"engineering",
"system",
"media"
],
"description": "Optional: limit to one collection (see list_collections)."
},
"model": {
"type": "string",
"enum": [
"claude",
"gpt",
"gemini",
"any",
"agent",
"midjourney",
"image",
"video"
],
"description": "Optional: only prompts laid out for this kind of model."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 8
}
},
"required": [
"query"
]
}Output Schema
{
"type": "object",
"properties": {
"prompts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Registry number, such as CAR-002."
},
"slug": {
"type": "string",
"description": "Pass it to get_prompt."
},
"title": {
"type": "string"
},
"use": {
"type": "string",
"description": "When to use it."
},
"collection": {
"type": "string",
"description": "The collection it belongs to."
},
"laid_out_for": {
"type": "string",
"description": "The kind of model it is laid out for."
},
"score": {
"type": "integer",
"description": "Its own grade out of 10."
},
"url": {
"type": "string",
"description": "Its page on thinkhard.si."
}
},
"required": [
"id",
"slug",
"title",
"use",
"collection",
"laid_out_for",
"score",
"url"
]
},
"description": "Best match first. Empty when nothing matches."
}
},
"required": [
"prompts"
]
}🟢get_prompt(prompt, values)
Get the full text of one prompt from the thinkhard.si repository by its slug, registry number (such as CAR-001) or exact title, with its {{blanks}}, what goes in each, and why it works. If the name does not match exactly, it answers with the closest matches instead. Pass values to fill blanks with the user's details. Ask the user for any blank you cannot fill from the conversation instead of inventing it.
Input Schema
{
"type": "object",
"properties": {
"prompt": {
"type": "string",
"description": "The slug, registry number or exact title from search_prompts."
},
"values": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "Optional: blank name → the user's text, for example {\"job_posting\": \"...\"}."
}
},
"required": [
"prompt"
]
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Registry number."
},
"slug": {
"type": "string"
},
"title": {
"type": "string"
},
"system": {
"type": "string",
"description": "The system prompt, with the given values filled in. Empty when the template has none."
},
"prompt": {
"type": "string",
"description": "The user message, with the given values filled in."
},
"open_blanks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Blanks still to fill. Ask the user for these."
},
"url": {
"type": "string"
}
},
"required": [
"id",
"slug",
"title",
"system",
"prompt",
"open_blanks",
"url"
]
}🟢list_collections
List the collections in the thinkhard.si prompt repository, with how many prompts each has.
Input Schema
{
"type": "object",
"properties": {}
}Output Schema
{
"type": "object",
"properties": {
"collections": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Pass it to search_prompts as collection."
},
"code": {
"type": "string",
"description": "Registry prefix, such as CAR."
},
"name": {
"type": "string"
},
"blurb": {
"type": "string"
},
"count": {
"type": "integer",
"description": "Prompts in the collection."
}
},
"required": [
"id",
"code",
"name",
"blurb",
"count"
]
}
}
},
"required": [
"collections"
]
}🟢grade_prompt(prompt, system, target)
Score a prompt out of 10 on the ten checks thinkhard.si uses (what to make, who it is for, background facts, length, format, what to avoid, what good looks like, an example, what to do if unsure, layout for the model). Returns which checks pass and a plain question for each one that fails. Rule-based and instant; use it to see what a prompt is missing before improving it.
Input Schema
{
"type": "object",
"properties": {
"prompt": {
"type": "string",
"description": "The prompt to grade (the user message)."
},
"system": {
"type": "string",
"description": "Optional system prompt, graded together with the prompt."
},
"target": {
"type": "string",
"enum": [
"claude",
"gpt",
"gemini",
"any",
"agent",
"midjourney",
"image",
"video"
],
"default": "any",
"description": "The model it is for. Layout is judged for this model."
}
},
"required": [
"prompt"
]
}Output Schema
{
"type": "object",
"properties": {
"score": {
"type": "integer",
"description": "Out of 10."
},
"band": {
"type": "string",
"description": "The score in a word."
},
"target": {
"type": "string",
"description": "The model it was read for."
},
"checks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"check": {
"type": "string"
},
"pass": {
"type": "boolean"
}
},
"required": [
"check",
"pass"
]
},
"description": "The ten checks, in order."
}
},
"required": [
"score",
"band",
"target",
"checks"
]
}🟢estimate_ai_cost(input_tokens, prompt_text, output_tokens, calls_per_month, models)
Estimate the monthly cost of running a prompt on current AI models (Claude, GPT, Gemini, DeepSeek, Qwen and others), from thinkhard.si's price catalog, which is checked against each provider's pricing page. Give token counts, or paste the prompt text to estimate them.
Input Schema
{
"type": "object",
"properties": {
"input_tokens": {
"type": "integer",
"minimum": 0,
"description": "Input tokens per call. Omit to estimate from prompt_text."
},
"prompt_text": {
"type": "string",
"description": "Optional: the prompt, to estimate input tokens (about 4 characters a token)."
},
"output_tokens": {
"type": "integer",
"minimum": 0,
"default": 500,
"description": "Output tokens per call."
},
"calls_per_month": {
"type": "integer",
"minimum": 1,
"default": 1000
},
"models": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional: model names or ids to include, such as \"Claude Sonnet 5.5\". Default: every current model."
}
}
}Output Schema
{
"type": "object",
"properties": {
"checked": {
"type": "string",
"description": "When the prices were last checked against each provider."
},
"calls_per_month": {
"type": "integer"
},
"input_tokens": {
"type": "integer"
},
"output_tokens": {
"type": "integer"
},
"models": {
"type": "array",
"items": {
"type": "object",
"properties": {
"model": {
"type": "string"
},
"ref": {
"type": "string",
"description": "Provider and model id."
},
"per_call_usd": {
"type": "number",
"description": "US dollars per call."
},
"monthly_usd": {
"type": "number",
"description": "US dollars a month."
},
"input_per_million": {
"type": "number",
"description": "US dollars per million input tokens."
},
"output_per_million": {
"type": "number",
"description": "US dollars per million output tokens."
},
"note": {
"type": "string",
"description": "Empty unless something about the price needs saying."
}
},
"required": [
"model",
"ref",
"per_call_usd",
"monthly_usd",
"input_per_million",
"output_per_million",
"note"
]
},
"description": "Cheapest first."
}
},
"required": [
"checked",
"calls_per_month",
"input_tokens",
"output_tokens",
"models"
]
}Community
Evidence