Servidor MCP

hunchful

io.hunchful/hunchful
Productividad Requiere autenticación MCP 2025-11-25

Qué hace este 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.
Acceso externo
Esquema de entrada
{'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}
Esquema de salida
{'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.
Acceso externo
Esquema de entrada
{'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}
Esquema de salida
{'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.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'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}
Esquema de salida
{'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.
Acceso externo
Esquema de entrada
{'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}
Esquema de salida
{'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.
Acceso externo
Esquema de entrada
{'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}
Esquema de salida
{'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.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'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}
Esquema de salida
{'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.
Acceso externo
Esquema de entrada
{'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}
Esquema de salida
{'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}
Añadido
apply_refinement
17 de September de 2026 a las 12:53
Añadido
find_matches
17 de September de 2026 a las 12:53
Añadido
find_complementary_thinkers
17 de September de 2026 a las 12:53
Añadido
add_hunch
17 de September de 2026 a las 12:53
Añadido
suggest_question
17 de September de 2026 a las 12:53
Añadido
propose_refinement
17 de September de 2026 a las 12:53
Añadido
read_model
17 de September de 2026 a las 12:53