Enhanciar — company brain
Ask your team's code, Slack and docs from any MCP client. Every answer cited to source. Early access
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"enhanciar": {
"url": "https://enhanciar.in/enhanciar/mcp/"
}
}
}远程端点
https://enhanciar.in/enhanciar/mcp/streamable-http它能做什么
工具清单
工具(12)
🟢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",
"properties": {},
"title": "list_pagesArguments"
}输出模式
{
"type": "object",
"properties": {
"result": {
"items": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"title": "Result",
"type": "array"
}
},
"required": [
"result"
],
"title": "list_pagesOutput"
}🟢search_wiki(query, limit)
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",
"properties": {
"query": {
"title": "Query",
"type": "string"
},
"limit": {
"default": 20,
"title": "Limit",
"type": "integer"
}
},
"required": [
"query"
],
"title": "search_wikiArguments"
}输出模式
{
"type": "object",
"properties": {
"result": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Result",
"type": "array"
}
},
"required": [
"result"
],
"title": "search_wikiOutput"
}🟢get_page(category, name)
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",
"properties": {
"category": {
"title": "Category",
"type": "string"
},
"name": {
"title": "Name",
"type": "string"
}
},
"required": [
"category",
"name"
],
"title": "get_pageArguments"
}输出模式
{
"type": "object",
"additionalProperties": true,
"title": "get_pageDictOutput"
}🟡query(question, model)
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",
"properties": {
"question": {
"title": "Question",
"type": "string"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Model"
}
},
"required": [
"question"
],
"title": "queryArguments"
}输出模式
{
"type": "object",
"additionalProperties": true,
"title": "queryDictOutput"
}🟡impact(target, depth)
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",
"properties": {
"target": {
"title": "Target",
"type": "string"
},
"depth": {
"default": 2,
"title": "Depth",
"type": "integer"
}
},
"required": [
"target"
],
"title": "impactArguments"
}输出模式
{
"type": "object",
"additionalProperties": true,
"title": "impactDictOutput"
}🟢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",
"properties": {},
"title": "get_graphArguments"
}输出模式
{
"type": "object",
"additionalProperties": true,
"title": "get_graphDictOutput"
}🟢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",
"properties": {},
"title": "list_reposArguments"
}输出模式
{
"type": "object",
"properties": {
"result": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Result",
"type": "array"
}
},
"required": [
"result"
],
"title": "list_reposOutput"
}🟢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",
"properties": {},
"title": "list_skillsArguments"
}输出模式
{
"type": "object",
"properties": {
"result": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Result",
"type": "array"
}
},
"required": [
"result"
],
"title": "list_skillsOutput"
}🟢get_skill(name)
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",
"properties": {
"name": {
"title": "Name",
"type": "string"
}
},
"required": [
"name"
],
"title": "get_skillArguments"
}输出模式
{
"type": "object",
"additionalProperties": true,
"title": "get_skillDictOutput"
}🟢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",
"properties": {},
"title": "get_process_mapArguments"
}输出模式
{
"type": "object",
"additionalProperties": true,
"title": "get_process_mapDictOutput"
}🟢list_proposed_actions(status)
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",
"properties": {
"status": {
"default": "",
"title": "Status",
"type": "string"
}
},
"title": "list_proposed_actionsArguments"
}输出模式
{
"type": "object",
"properties": {
"result": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Result",
"type": "array"
}
},
"required": [
"result"
],
"title": "list_proposed_actionsOutput"
}⚪propose_action(action_type, title, description, evidence)
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",
"properties": {
"action_type": {
"title": "Action Type",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
},
"description": {
"default": "",
"title": "Description",
"type": "string"
},
"evidence": {
"default": "",
"title": "Evidence",
"type": "string"
}
},
"required": [
"action_type",
"title"
],
"title": "propose_actionArguments"
}输出模式
{
"type": "object",
"additionalProperties": true,
"title": "propose_actionDictOutput"
}推荐提示词
get_pagesearch_wikiget_pagesearch_wikilist_pages社区
证据