MCP 服务器

Enhanciar — company brain

in.enhanciar/enhanciar

此 MCP 可以做什么

Searches a company's ingested code, Slack and documentation, provides cited answers and dependency impact analysis, and proposes actions for human approval.

get_graph
Return the community/knowledge graph manifest for visualisation. Useful when the calling agent wants the high-level structure of the key's workspace (clusters, hub nodes, cross-references) rather than the contents of any one page. Returns ``{nodes, edges, communities, stats}`` — exact shape mirrors the ``/api/wiki/graph`` REST endpoint.
输入模式
{'type': 'object', 'title': 'get_graphArguments', 'properties': {}}
输出模式
{'type': 'object', 'title': 'get_graphDictOutput', 'additionalProperties': True}
get_page
Fetch a single wiki page from the key's workspace. Args: category: One of ``entities | concepts | people | decisions | sources | flows | infrastructure | tickets``. name: Page slug (without ``.md`` extension), as returned by ``list_pages`` / ``search_wiki``. Returns ``{category, name, content}`` — ``content`` is the full markdown body including YAML frontmatter. Returns ``{error: "..."}`` if the page doesn't exist.
输入模式
{'type': 'object', 'title': 'get_pageArguments', 'properties': {'name': {'title': 'Name', 'default': ''}, 'page': {'title': 'Page', 'default': ''}, 'path': {'title': 'Path', 'default': ''}, 'slug': {'title': 'Slug', 'default': ''}, 'title': {'title': 'Title', 'default': ''}, 'category': {'title': 'Category', 'default': ''}}}
输出模式
{'type': 'object', 'title': 'get_pageDictOutput', 'additionalProperties': True}
get_process_map
Return the "living map of how the company works" for the key's workspace. A graph of process nodes (compiled skills), the external systems they touch (GitHub, Slack, Jira, …), the wiki docs they were derived from, and team groups — with derived_from / uses / references edges. Use this when the agent wants the high-level operational structure rather than one skill's steps.
输入模式
{'type': 'object', 'title': 'get_process_mapArguments', 'properties': {}}
输出模式
{'type': 'object', 'title': 'get_process_mapDictOutput', 'additionalProperties': True}
get_skill
Fetch one compiled skill by name (slug from ``list_skills``). Returns ``{name, markdown, meta}`` — ``markdown`` is the full agent-executable SKILL.md content (frontmatter + steps), ``meta`` is the parsed frontmatter. Includes an ``error`` key when the skill doesn't exist (with the available names).
输入模式
{'type': 'object', 'title': 'get_skillArguments', 'required': ['name'], 'properties': {'name': {'type': 'string', 'title': 'Name'}}}
输出模式
{'type': 'object', 'title': 'get_skillDictOutput', 'additionalProperties': True}
impact
Compute the blast radius of changing ``target`` in the key's workspace. Use this before editing code to see what a change ripples into: direct callers/callees, every affected file, the affected tests, the transitive dependency set, and example dependency paths with per-path facts (hops, dependents at the endpoint, whether it lands in a test). There is deliberately no risk score. There was one — thresholds on the transitive count — and it was a verdict the caller could not check or argue with. The counts it was computed from are all here; judge from those. Args: target: A graph node id, wiki page name, file path (``micrograd/engine.py``), or a function fqn (``engine.py::func``). depth: How many hops to traverse the call graph (default 2). Returns the impact dict — ``{target, label, found, direct_callers, direct_callees, affected_files, affected_tests, transitive_nodes, transitive_count, paths, path_facts}``.
输入模式
{'type': 'object', 'title': 'impactArguments', 'required': ['target'], 'properties': {'depth': {'type': 'integer', 'title': 'Depth', 'default': 2}, 'target': {'type': 'string', 'title': 'Target'}}}
输出模式
{'type': 'object', 'title': 'impactDictOutput', 'additionalProperties': True}
list_pages
List every wiki page the caller can see in the key's workspace. Returns a list of ``{category, name, title}`` records — feed each one to ``get_page`` to fetch the full markdown body. Use this first when you want a directory view; for a specific question prefer ``query`` which handles retrieval for you.
输入模式
{'type': 'object', 'title': 'list_pagesArguments', 'properties': {}}
输出模式
{'type': 'object', 'title': 'list_pagesOutput', 'required': ['result'], 'properties': {'result': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {'type': 'string'}}, 'title': 'Result'}}}
list_proposed_actions
List the key's workspace's proposed actions (the approval queue). Read-only. Optionally filter by ``status`` (proposed / approved / executing / done / failed / dismissed). Returns ``{id, action_type, status, source, title, source_doc_id, external_id}`` per proposal. NOTE: MCP can read and PROPOSE actions but deliberately cannot approve or execute them — a human approves every action in the app UI.
输入模式
{'type': 'object', 'title': 'list_proposed_actionsArguments', 'properties': {'status': {'type': 'string', 'title': 'Status', 'default': ''}}}
输出模式
{'type': 'object', 'title': 'list_proposed_actionsOutput', 'required': ['result'], 'properties': {'result': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'title': 'Result'}}}
list_repos
List the repos ingested into the key's workspace. Returns ``{full_name, branch, last_ingested_at}`` records. Use this when the agent needs to know what context is available before asking a question. Reads what ingest actually recorded for this namespace: ``repos.json`` (the repo→clone map every other read path resolves through) plus the per-repo ``_state`` files that carry the branch and the last run's timestamp. It used to read a Firestore subcollection ``users/{uid}/repos``, which was wrong twice over. It was keyed by the person rather than the workspace — the bug this module was fixed for — and nothing in the codebase has ever written to that path, so the tool returned an empty list to everyone, forever. Hence ``branch`` rather than the old ``default_branch``: the state file records the branch that was actually ingested, and no caller can be depending on a key that never had a row under it.
输入模式
{'type': 'object', 'title': 'list_reposArguments', 'properties': {}}
输出模式
{'type': 'object', 'title': 'list_reposOutput', 'required': ['result'], 'properties': {'result': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'title': 'Result'}}}
list_skills
List the compiled skills (recurring procedures) in the key's workspace. Skills are agent-executable SKILL.md pages mined from that workspace's wiki by the skills compiler. Returns ``{name, title, description, confidence, last_compiled, sources}`` records — feed a ``name`` to ``get_skill`` for the full markdown. Empty list = nothing compiled yet (the user can run a compile from Enhanciar's UI or API).
输入模式
{'type': 'object', 'title': 'list_skillsArguments', 'properties': {}}
输出模式
{'type': 'object', 'title': 'list_skillsOutput', 'required': ['result'], 'properties': {'result': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'title': 'Result'}}}
propose_action
Propose a new action for human approval (does NOT execute it). ``action_type`` is a registered executor id (e.g. ``jira.create_issue``, ``linear.create_issue``, ``github.create_issue``). The proposal lands in the key's workspace's approval queue where a person picks the target and approves it — approve/execute are intentionally NOT exposed over MCP. Returns the created ``{id, action_type, status}`` or an ``error``.
输入模式
{'type': 'object', 'title': 'propose_actionArguments', 'required': ['action_type', 'title'], 'properties': {'title': {'type': 'string', 'title': 'Title'}, 'evidence': {'type': 'string', 'title': 'Evidence', 'default': ''}, 'action_type': {'type': 'string', 'title': 'Action Type'}, 'description': {'type': 'string', 'title': 'Description', 'default': ''}}}
输出模式
{'type': 'object', 'title': 'propose_actionDictOutput', 'additionalProperties': True}
query
Ask Enhanciar a natural-language question grounded in the key's workspace. This is the high-level tool — use it for any "what does X do", "why did we choose Y", "where is Z handled" question. It runs the full retrieval + synthesis pipeline and returns the answer plus citations. Args: question: Natural-language question. model: Optional model id override (``gemini-2.5-flash``, ``gpt-4o``, ``claude-sonnet-4-5``, etc.). If omitted the saved default is used — the workspace's in a team workspace, the caller's own in a personal one. Returns ``{answer, sources, model}`` — ``sources`` is a list of ``{category, name, url}`` citations the LLM grounded its answer in. Surface them to the human so they can verify. When the workspace has nothing ingested at all you get ``{answer, empty_brain: true}`` and no sources: that is a statement about the workspace, not a failed search, so rephrasing the question will not change it.
输入模式
{'type': 'object', 'title': 'queryArguments', 'required': ['question'], 'properties': {'model': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Model', 'default': None}, 'question': {'type': 'string', 'title': 'Question'}}}
输出模式
{'type': 'object', 'title': 'queryDictOutput', 'additionalProperties': True}
search_wiki
Substring search across the wiki pages in the key's workspace. Cheap and deterministic — no embedding required. Returns up to ``limit`` (default 20, max 50) ``{category, name, title, snippet}`` hits. The ``snippet`` is a short window around the first match, safe to surface in chat as a citation preview. For semantic / natural-language questions prefer ``query``.
输入模式
{'type': 'object', 'title': 'search_wikiArguments', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'title': 'Limit', 'default': 20}, 'query': {'type': 'string', 'title': 'Query'}}}
输出模式
{'type': 'object', 'title': 'search_wikiOutput', 'required': ['result'], 'properties': {'result': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'title': 'Result'}}}
已更改
get_page
2026年10月1日 02:43
已添加
propose_action
2026年9月21日 02:40
已添加
list_proposed_actions
2026年9月21日 02:40
已添加
get_process_map
2026年9月21日 02:40
已添加
get_skill
2026年9月21日 02:40
已添加
list_skills
2026年9月21日 02:40
已添加
list_repos
2026年9月21日 02:40
已添加
get_graph
2026年9月21日 02:40
已添加
impact
2026年9月21日 02:40
已添加
query
2026年9月21日 02:40
已添加
get_page
2026年9月21日 02:40
已添加
search_wiki
2026年9月21日 02:40
已添加
list_pages
2026年9月21日 02:40