MCP-Server

hunchful

io.hunchful/hunchful
Produktivität Authentifizierung erforderlich MCP 2025-11-25

Was dieses MCP kann

Maintains a consent-based, revisable model of a person's working preferences and supports collaboration matching and refinement.

add_hunch
Record a NEW hunch the person just confirmed in conversation — a custom axis with their answer, added directly to their model (visible, revisable, removable by them). OWNER-LEVEL trust required: OAuth as the owner, or the editToken. Only record what the person actually said — never invent or infer a hunch they didn't confirm. For situational axes name it 'When <situation>'. If they haven't answered yet, use suggest_question instead.
Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name', 'poleA', 'poleB', 'pole'], 'properties': {'by': {'type': 'string', 'description': 'Your name, e.g. "claude" — recorded in the revision history.'}, 'name': {'type': 'string', 'description': 'Short axis name, e.g. "When plans change suddenly".'}, 'pole': {'enum': ['A', 'B'], 'type': 'string', 'description': 'The pole the person SAID fits them.'}, 'poleA': {'type': 'string', 'description': 'Pole A label.'}, 'poleB': {'type': 'string', 'description': 'Pole B label.'}, 'modelId': {'type': 'string'}, 'editToken': {'type': 'string', 'description': "The model's edit key, if not connected via OAuth."}, 'confidence': {'type': 'number', 'maximum': 0.97, 'minimum': 0.05, 'description': '0.05–0.97; default 0.7 for a fresh self-stated answer.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'patternId', 'urls', 'note'], 'properties': {'ok': {'type': 'boolean'}, 'note': {'type': 'string'}, 'urls': {'type': 'object', 'required': ['publicPage', 'editHub', 'introductions'], 'properties': {'editHub': {'type': 'string'}, 'publicPage': {'type': 'string'}, 'introductions': {'type': 'string'}}, 'additionalProperties': False}, 'falsifier': {'type': 'string'}, 'patternId': {'type': 'string'}, 'statement': {'type': 'string'}}, 'additionalProperties': False}
apply_refinement
Apply a refinement directly as one logged revision (append evidence pointers, nudge confidence). Authorized by OAuth (own model) or an editToken. Prefer propose_refinement unless the owner asked for direct writes.
Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['items'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['patternId', 'direction'], 'properties': {'source': {'type': 'string', 'description': 'Provenance pointer only, e.g. "agent:chatgpt". No free text, no names.'}, 'direction': {'enum': ['strengthens', 'weakens'], 'type': 'string', 'description': 'Does the evidence strengthen or weaken this hunch?'}, 'patternId': {'type': 'string', 'description': "One of the model's refinable axis ids (see read_model → refinablePatternIds)."}, 'observedAt': {'type': 'string', 'description': 'ISO date the evidence was observed (defaults to now).'}}, 'additionalProperties': False}, 'maxItems': 50, 'minItems': 1}, 'modelId': {'type': 'string'}, 'editToken': {'type': 'string', 'description': "The model's edit key, if not connected via OAuth."}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'applied', 'updatedAt', 'urls', 'note'], 'properties': {'ok': {'type': 'boolean'}, 'note': {'type': 'string'}, 'urls': {'type': 'object', 'required': ['publicPage', 'editHub', 'introductions'], 'properties': {'editHub': {'type': 'string'}, 'publicPage': {'type': 'string'}, 'introductions': {'type': 'string'}}, 'additionalProperties': False}, 'applied': {'type': 'array', 'items': {'type': 'object', 'required': ['patternId', 'direction', 'confidence'], 'properties': {'direction': {'type': 'string'}, 'patternId': {'type': 'string'}, 'confidence': {'type': 'number'}}, 'additionalProperties': False}}, 'updatedAt': {'type': 'string'}}, 'additionalProperties': False}
find_complementary_thinkers
Which famous thinkers would COMPLETE this person — opposite poles on the axes where opposites unstick each other (not similarity). Open read; great for curiosity and for explaining what a complementary collaborator looks like. Share the pages as links.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'modelId': {'type': 'string', 'description': "Model id. Omit when connected via OAuth to use the person's own model."}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['modelId', 'note', 'complements', 'humanVersion'], 'properties': {'note': {'type': 'string'}, 'modelId': {'type': 'string'}, 'complements': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'tag', 'blurb', 'complementaryAxes', 'url'], 'properties': {'tag': {'type': 'string'}, 'url': {'type': 'string'}, 'name': {'type': 'string'}, 'blurb': {'type': 'string'}, 'complementaryAxes': {'type': 'array', 'items': {'type': 'object', 'required': ['axis', 'why'], 'properties': {'why': {'type': 'string'}, 'axis': {'type': 'string'}}, 'additionalProperties': False}}}, 'additionalProperties': False}}, 'humanVersion': {'type': 'string'}}, 'additionalProperties': False}
find_matches
Look for complementary PEOPLE for the connected person (rule: agents propose, humans accept — this creates pending proposals the human decides on in their Hunchful hub; identities are never revealed here). Requires OAuth as the owner or the model's editToken, and the person must have joined introductions on their matches page.
Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'modelId': {'type': 'string'}, 'direction': {'enum': ['seek', 'offer'], 'type': 'string', 'description': 'seek = they want a fresh angle; offer = they can offer one. Default seek.'}, 'editToken': {'type': 'string', 'description': "The model's edit key, if not connected via OAuth."}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['proposals', 'matchesUrl', 'note'], 'properties': {'note': {'type': 'string'}, 'proposals': {'type': 'array', 'items': {'type': 'object', 'required': ['proposalId', 'rationale', 'otherIntent', 'mySideAccepted', 'otherSideAccepted', 'status'], 'properties': {'status': {'type': 'string'}, 'rationale': {'type': 'object', 'properties': {}, 'additionalProperties': True}, 'proposalId': {'type': 'string'}, 'otherIntent': {'type': 'string'}, 'mySideAccepted': {'type': 'boolean'}, 'otherSideAccepted': {'type': 'boolean'}}, 'additionalProperties': False}}, 'matchesUrl': {'type': 'string'}}, 'additionalProperties': False}
propose_refinement
Propose a refinement (provenance pointers only). It lands in the owner's confirm queue — nothing changes until they accept. Authorized by OAuth (own model) or a contributionToken.
Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['items'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['patternId', 'direction'], 'properties': {'source': {'type': 'string', 'description': 'Provenance pointer only, e.g. "agent:chatgpt". No free text, no names.'}, 'direction': {'enum': ['strengthens', 'weakens'], 'type': 'string', 'description': 'Does the evidence strengthen or weaken this hunch?'}, 'patternId': {'type': 'string', 'description': "One of the model's refinable axis ids (see read_model → refinablePatternIds)."}, 'observedAt': {'type': 'string', 'description': 'ISO date the evidence was observed (defaults to now).'}}, 'additionalProperties': False}, 'maxItems': 50, 'minItems': 1}, 'modelId': {'type': 'string'}, 'contributionToken': {'type': 'string', 'description': 'Scoped propose-only key, if not connected via OAuth.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['status', 'proposalIds', 'reviewUrl', 'note'], 'properties': {'note': {'type': 'string'}, 'status': {'type': 'string'}, 'reviewUrl': {'type': 'string'}, 'proposalIds': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
read_model
Read a Hunchful collaboration model: its hunches (axis, pole, confidence), the axis ids you can refine, and how you're connected. Start here. With OAuth, omit modelId to read the connected person's own model.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'modelId': {'type': 'string', 'description': "Model id. Omit when connected via OAuth to use the person's own model."}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['modelId', 'connectedAs', 'libraryVersion', 'hunches', 'refinablePatternIds', 'openHunches', 'guidance', 'constraints', 'canApplyDirectly', 'urls', 'render'], 'properties': {'urls': {'type': 'object', 'required': ['publicPage', 'editHub', 'introductions'], 'properties': {'editHub': {'type': 'string'}, 'publicPage': {'type': 'string'}, 'introductions': {'type': 'string'}}, 'additionalProperties': False}, 'render': {'type': 'string'}, 'hunches': {'type': 'array', 'items': {'type': 'object', 'required': ['patternId', 'pole', 'statement', 'confidence', 'uncertainty', 'falsifier', 'axis'], 'properties': {'axis': {'type': 'object', 'required': ['name', 'poleA', 'poleB'], 'properties': {'name': {'type': 'string'}, 'poleA': {'type': 'string'}, 'poleB': {'type': 'string'}}, 'additionalProperties': False}, 'pole': {'enum': ['A', 'B'], 'type': 'string'}, 'falsifier': {'type': 'string'}, 'patternId': {'type': 'string'}, 'statement': {'type': 'string'}, 'confidence': {'type': 'number'}, 'appliesWhen': {'type': 'string'}, 'situational': {'type': 'boolean'}, 'uncertainty': {'type': 'string'}}, 'additionalProperties': False}}, 'modelId': {'type': 'string'}, 'guidance': {'type': 'string'}, 'connectedAs': {'type': 'string'}, 'constraints': {'type': 'string'}, 'openHunches': {'type': 'object', 'required': ['patternIds', 'howto'], 'properties': {'howto': {'type': 'string'}, 'patternIds': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'howToConnect': {'type': 'string'}, 'libraryVersion': {'type': 'string'}, 'canApplyDirectly': {'type': 'boolean'}, 'refinablePatternIds': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
suggest_question
Suggest a NEW question/axis for the person — a dimension their model doesn't capture (situational axes welcome: name it 'When <situation>'). It lands in their Hunchful inbox and, by default, emails them; nothing is added until they answer. Authorized by OAuth (own model) or a contributionToken. Use sparingly — about once a week at most.
Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name', 'poleA', 'poleB', 'question'], 'properties': {'by': {'type': 'string', 'description': 'Your name, e.g. "claude".'}, 'why': {'type': 'string', 'description': "Why you're asking — what you observed (no quotes, no names)."}, 'name': {'type': 'string', 'description': 'Short axis name, e.g. "When plans change suddenly".'}, 'poleA': {'type': 'string', 'description': 'Pole A label — one way of working.'}, 'poleB': {'type': 'string', 'description': 'Pole B label — the other way.'}, 'modelId': {'type': 'string'}, 'question': {'type': 'string', 'description': 'The question, addressed to the person.'}, 'contributionToken': {'type': 'string', 'description': 'Scoped propose-only key, if not connected via OAuth.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['status', 'proposalId', 'notified', 'inboxUrl', 'note'], 'properties': {'note': {'type': 'string'}, 'status': {'type': 'string'}, 'inboxUrl': {'type': 'string'}, 'notified': {'type': 'boolean'}, 'proposalId': {'type': 'string'}}, 'additionalProperties': False}
Hinzugefügt
apply_refinement
17. September 2026 12:53
Hinzugefügt
find_matches
17. September 2026 12:53
Hinzugefügt
find_complementary_thinkers
17. September 2026 12:53
Hinzugefügt
add_hunch
17. September 2026 12:53
Hinzugefügt
suggest_question
17. September 2026 12:53
Hinzugefügt
propose_refinement
17. September 2026 12:53
Hinzugefügt
read_model
17. September 2026 12:53