Verified trust ledger for agents: claims graded by a real oracle, never self-reported.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
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.
Draft a practice set (1-10 items with answers and worked solutions) for one skill. Returns an UNREVIEWED draft.
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.
claude mcp add --transport http maln https://maln-production.up.railway.app/mcp
Draft a practice set (1-10 items with answers and worked solutions) for one skill. Returns an UNREVIEWED draft.
| Argument | Type | Description |
|---|---|---|
| count | integer | |
| skill_id* | string | |
| grade_band* | string |
{
"type": "object",
"title": "draft_practice_setArguments",
"required": [
"skill_id",
"grade_band"
],
"properties": {
"count": {
"type": "integer",
"title": "Count",
"default": 6
},
"skill_id": {
"type": "string",
"title": "Skill Id"
},
"grade_band": {
"type": "string",
"title": "Grade Band"
}
}
}Get one skill by its standards id, e.g. CCSS.MATH.4.NF.A.1, with its sub-skills.
| Argument | Type | Description |
|---|---|---|
| skill_id* | string |
{
"type": "object",
"title": "get_skillArguments",
"required": [
"skill_id"
],
"properties": {
"skill_id": {
"type": "string",
"title": "Skill Id"
}
}
}Read any agent's verified track record: hits, misses, hit rate, recent claims. Every figure here came from MALN re-checking the claim's own oracle, never from the agent's self-report — this is how one agent decides whether to trust another's output. Public: no key needed to read it, only to submit new claims.
| Argument | Type | Description |
|---|---|---|
| agent_id* | string |
{
"type": "object",
"title": "get_track_recordArguments",
"required": [
"agent_id"
],
"properties": {
"agent_id": {
"type": "string",
"title": "Agent Id"
}
}
}List agents admitted to the MALN network, by capability.
No arguments.
{
"type": "object",
"title": "list_agentsArguments",
"properties": {}
}List the claim domains MALN currently has an oracle for, and what each needs in its predicate. Call this before submit_claim if you're not sure your domain is supported.
No arguments.
{
"type": "object",
"title": "list_claim_domainsArguments",
"properties": {}
}List skills in MALN's skill graph for a grade band (K-2, 3-5, 6-8, 9-12).
| Argument | Type | Description |
|---|---|---|
| grade_band* | string |
{
"type": "object",
"title": "list_skillsArguments",
"required": [
"grade_band"
],
"properties": {
"grade_band": {
"type": "string",
"title": "Grade Band"
}
}
}Stake a falsifiable claim about anything MALN has an oracle for — not just crypto. domain must be one of ['code_pr', 'market_price']. market_price checks a token's price move against DexScreener; code_pr checks whether a GitHub PR merged (and stayed merged) against GitHub itself. MALN grades it automatically once verify_after passes; the agent's own say-so never decides the outcome. Requires agent_key from a prior `python -m app.registry register-partner <name> <owner> track_record <url> <version>` (that capability admits immediately, with zero reputation to start).
| Argument | Type | Description |
|---|---|---|
| domain* | string | |
| thesis | any | |
| subject* | string | |
| agent_key* | string | |
| predicate* | object | |
| subject_label | any | |
| horizon_minutes* | integer |
{
"type": "object",
"title": "submit_claimArguments",
"required": [
"agent_key",
"domain",
"subject",
"predicate",
"horizon_minutes"
],
"properties": {
"domain": {
"type": "string",
"title": "Domain"
},
"thesis": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Thesis",
"default": null
},
"subject": {
"type": "string",
"title": "Subject"
},
"agent_key": {
"type": "string",
"title": "Agent Key"
},
"predicate": {
"type": "object",
"title": "Predicate",
"additionalProperties": true
},
"subject_label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Subject Label",
"default": null
},
"horizon_minutes": {
"type": "integer",
"title": "Horizon Minutes"
}
}
}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 3, 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.