The best prompt and the best model for the job, tested and improved by your coding agent.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer key from https://springprompt.com/app/connect
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
A test's status and, when done, what it found: the best model, each model's pass rate and cost, and sample failures.
Wait up to this long for it to finish, at most 25.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http prompt-test https://springprompt.com/mcp \ --header 'Authorization: Bearer YOUR_TOKEN'
Headers
Authorization (required): Bearer key from https://springprompt.com/app/connectA test's status and, when done, what it found: the best model, each model's pass rate and cost, and sample failures.
| Argument | Type | Description |
|---|---|---|
| test_id* | string | |
| wait_seconds | integer | Wait up to this long for it to finish, at most 25. |
{
"type": "object",
"required": [
"test_id"
],
"properties": {
"test_id": {
"type": "string"
},
"wait_seconds": {
"type": "integer",
"description": "Wait up to this long for it to finish, at most 25."
}
},
"additionalProperties": false
}Rewrite a finished test's prompt from its failures and ratings, then test the new version on the same cases, checks and models. Spends credit.
| Argument | Type | Description |
|---|---|---|
| test_id* | string |
{
"type": "object",
"required": [
"test_id"
],
"properties": {
"test_id": {
"type": "string"
}
},
"additionalProperties": false
}This account's trained judges, and how often each agreed with its rater.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Models a test can use, with prices, and the credit left on this account.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}This account's recent prompt tests.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}A link that lets anyone rate a test's answers on their phone, with no account and the models hidden. Send it to whoever knows what good looks like. Anyone with the link can read those answers and inputs, so ask before sharing.
| Argument | Type | Description |
|---|---|---|
| test_id* | string |
{
"type": "object",
"required": [
"test_id"
],
"properties": {
"test_id": {
"type": "string"
}
},
"additionalProperties": false
}Score up to 50 answers with a trained judge: how likely the person it learned from is to call each one good, from 0 to 1. Spends a little credit.
| Argument | Type | Description |
|---|---|---|
| answers* | array | |
| judge_id* | string |
{
"type": "object",
"required": [
"judge_id",
"answers"
],
"properties": {
"answers": {
"type": "array",
"items": {
"type": "string"
}
},
"judge_id": {
"type": "string"
}
},
"additionalProperties": false
}Start a test of one prompt across several models. Spends credit, never more than max_spend_usd by estimate. Returns at once with a test_id: call get_test for the results. Cases and checks are drafted if left out.
| Argument | Type | Description |
|---|---|---|
| name | string | A short name, like Support triage. |
| cases | array | Realistic inputs, up to 12. |
| checks | array | Yes/no statements a good answer meets. |
| models | array | Model IDs from list_models, up to 6. Default: a starting mix. |
| prompt* | string | The user prompt, with {{variables}}. |
| system | string | The system prompt, if any. |
| max_spend_usd | number | Limit for this test. Default 1. Models are left out, dearest first, to fit. |
{
"type": "object",
"required": [
"prompt"
],
"properties": {
"name": {
"type": "string",
"description": "A short name, like Support triage."
},
"cases": {
"type": "array",
"items": {
"type": "object",
"properties": {
"notes": {
"type": "string",
"description": "What a good answer does."
},
"values": {
"type": "object",
"description": "A value for each variable."
}
}
},
"description": "Realistic inputs, up to 12."
},
"checks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Yes/no statements a good answer meets."
},
"models": {
"type": "array",
"items": {
"type": "string"
},
"description": "Model IDs from list_models, up to 6. Default: a starting mix."
},
"prompt": {
"type": "string",
"description": "The user prompt, with {{variables}}."
},
"system": {
"type": "string",
"description": "The system prompt, if any."
},
"max_spend_usd": {
"type": "number",
"description": "Limit for this test. Default 1. Models are left out, dearest first, to fit."
}
},
"additionalProperties": false
}Train a judge on a test's ratings. It's tested on answers it hasn't seen, and only kept if it beats always giving the commoner verdict. Spends a little credit.
| Argument | Type | Description |
|---|---|---|
| name* | string | Whose opinions, like Maria's taste. |
| test_id* | string |
{
"type": "object",
"required": [
"test_id",
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Whose opinions, like Maria's taste."
},
"test_id": {
"type": "string"
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 6, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.