Serveur MCP

hunchful

io.hunchful/hunchful
Productivité Authentification requise MCP 2025-11-25

Ce que fait ce MCP

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.
Accès externe
Schéma d’entrée
{'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}
Schéma de sortie
{'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.
Accès externe
Schéma d’entrée
{'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}
Schéma de sortie
{'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.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'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}
Schéma de sortie
{'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.
Accès externe
Schéma d’entrée
{'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}
Schéma de sortie
{'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.
Accès externe
Schéma d’entrée
{'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}
Schéma de sortie
{'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.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'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}
Schéma de sortie
{'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.
Accès externe
Schéma d’entrée
{'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}
Schéma de sortie
{'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}
Ajouté
apply_refinement
17 September 2026 12:53
Ajouté
find_matches
17 September 2026 12:53
Ajouté
find_complementary_thinkers
17 September 2026 12:53
Ajouté
add_hunch
17 September 2026 12:53
Ajouté
suggest_question
17 September 2026 12:53
Ajouté
propose_refinement
17 September 2026 12:53
Ajouté
read_model
17 September 2026 12:53