Obsolescence-risk screening: predicts if a product gets absorbed into core LLM-platform features.
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.
Assess one product's obsolescence risk. Provide exactly ONE of description/url/pitch_company_id/deck_text. Async — returns job_id; poll get_assessment. Defaults to deep mode. Optionally pass requested_by to identify the caller (shown in the activity feed).
Who is requesting this assessment (name/handle/agent id) — shown in the #doom-activity feed; defaults to anonymous.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Assess one product's obsolescence risk. Provide exactly ONE of description/url/pitch_company_id/deck_text. Async — returns job_id; poll get_assessment. Defaults to deep mode. Optionally pass requested_by to identify the caller (shown in the activity feed).
| Argument | Type | Description |
|---|---|---|
| url | string | |
| mode | string | |
| deck_text | string | |
| description | string | |
| requested_by | string | Who is requesting this assessment (name/handle/agent id) — shown in the #doom-activity feed; defaults to anonymous. |
| pitch_company_id | string |
{
"type": "object",
"properties": {
"url": {
"type": "string"
},
"mode": {
"enum": [
"quick",
"deep"
],
"type": "string",
"default": "deep"
},
"deck_text": {
"type": "string"
},
"description": {
"type": "string"
},
"requested_by": {
"type": "string",
"description": "Who is requesting this assessment (name/handle/agent id) — shown in the #doom-activity feed; defaults to anonymous."
},
"pitch_company_id": {
"type": "string"
}
},
"additionalProperties": false
}Prep Gate. Validates config + confirms the roadmap-signals KB is within the staleness threshold. Fails closed if stale. Call before assess_product.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Poll an assessment job_id. Returns status + the typed assessment when complete. Hard timeout — never hangs on pending.
| Argument | Type | Description |
|---|---|---|
| job_id* | string |
{
"type": "object",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string"
}
},
"additionalProperties": false
}Recent assessments, filterable by verdict.
| Argument | Type | Description |
|---|---|---|
| limit | number | |
| verdict | string |
{
"type": "object",
"properties": {
"limit": {
"type": "number",
"default": 20
},
"verdict": {
"type": "string"
}
},
"additionalProperties": false
}List the active (signed, grounding) roadmap signals with their ids — use to find a signal_id to retire. Operator-only.
| Argument | Type | Description |
|---|---|---|
| operator_key* | string |
{
"type": "object",
"required": [
"operator_key"
],
"properties": {
"operator_key": {
"type": "string"
}
},
"additionalProperties": false
}KB-refresh review queue. List auto-scraped candidate roadmap signals (default: pending). Operator-only. Approve/reject with review_signal_candidate; the weekly cron signs approved ones into the live KB.
| Argument | Type | Description |
|---|---|---|
| limit | number | |
| status | string | |
| operator_key* | string |
{
"type": "object",
"required": [
"operator_key"
],
"properties": {
"limit": {
"type": "number",
"default": 50
},
"status": {
"enum": [
"pending",
"approved",
"rejected",
"signed"
],
"type": "string"
},
"operator_key": {
"type": "string"
}
},
"additionalProperties": false
}Inspectable State. No input. Counts, recent activity, roadmap-signal freshness, health, last calibration run.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Outcome-feedback (learning loop). Record what ACTUALLY happened to a previously-assessed product as a labeled calibration case; the weekly recalibration folds it into the gate. Operator-only (requires operator_key). Provide either job_id (links the case to that assessment + reuses its product) or product text.
| Argument | Type | Description |
|---|---|---|
| notes | string | |
| job_id | string | |
| product | string | |
| operator_key* | string | |
| year_observed | number | |
| actual_outcome* | string | |
| expected_verdict* | string |
{
"type": "object",
"required": [
"operator_key",
"actual_outcome",
"expected_verdict"
],
"properties": {
"notes": {
"type": "string"
},
"job_id": {
"type": "string"
},
"product": {
"type": "string"
},
"operator_key": {
"type": "string"
},
"year_observed": {
"type": "number"
},
"actual_outcome": {
"enum": [
"sherlocked",
"survived",
"thrived"
],
"type": "string"
},
"expected_verdict": {
"enum": [
"roadkill",
"squeezed",
"defensible",
"riding-the-wave"
],
"type": "string"
}
},
"additionalProperties": false
}UNLEARN a KB signal that became false/obsolete (e.g. a rumored feature cancelled, or a signal no longer predictive). Soft-deletes it (active=false) so it stops grounding assessments immediately — recoverable. Operator-only. Find the id via list_kb_signals.
| Argument | Type | Description |
|---|---|---|
| reason* | string | |
| signal_id* | string | |
| operator_key* | string |
{
"type": "object",
"required": [
"operator_key",
"signal_id",
"reason"
],
"properties": {
"reason": {
"type": "string"
},
"signal_id": {
"type": "string"
},
"operator_key": {
"type": "string"
}
},
"additionalProperties": false
}Approve or reject a KB-refresh candidate signal. Operator-only. Approved candidates are signed (Ed25519) into the live roadmap_signals KB by the next refresh run; rejected ones are dropped. Controls what becomes grounding truth.
| Argument | Type | Description |
|---|---|---|
| action* | string | |
| candidate_id* | string | |
| operator_key* | string |
{
"type": "object",
"required": [
"operator_key",
"candidate_id",
"action"
],
"properties": {
"action": {
"enum": [
"approve",
"reject"
],
"type": "string"
},
"candidate_id": {
"type": "string"
},
"operator_key": {
"type": "string"
}
},
"additionalProperties": false
}UNLEARN a calibration case whose label turned out wrong or obsolete — retires it (active=false) so the recalibration gate stops scoring it. To correct, retire the wrong case then record_outcome the right one. Operator-only.
| Argument | Type | Description |
|---|---|---|
| reason* | string | |
| case_id* | string | |
| operator_key* | string |
{
"type": "object",
"required": [
"operator_key",
"case_id",
"reason"
],
"properties": {
"reason": {
"type": "string"
},
"case_id": {
"type": "string"
},
"operator_key": {
"type": "string"
}
},
"additionalProperties": false
}