Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PYTHONPATHYesSet to the repository's src directory so the MCP server module can be imported, e.g. $PWD/src.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

本机 OntoPoc:上传业务表或文档建本体,让人判断它对不对、能不能拿去用。 模型只提议,代码核验,判断只归人。 调用顺序

  1. health 看服务和模型凭据;list_runs 看已有的运行,没有就 build_ontology 上传文件新建。

  2. run_overview,先看 open_items:那是要带给人的事,逐条讲给人听,别自己替他定。

  3. 再按需看细节:list_objects、list_relations、data_check、list_questions、object_rows 等。 花钱的工具

  • build_ontology、ask_question、draft_form、find_name_variants 会调模型,慢且花钱;其余工具都是本机代码在算,不花钱。

  • build_ontology 要等模型跑完,常常半分钟到几分钟,先跟人说一声。

  • 导出(export_forms、export_ttl、export_mermaid、export_pipeline_spec)写成文件,只返回路径;export_pipeline_spec 的编排需求单交给搭管道的人,只描述要做什么,不执行加工。 每种答案怎么办

  • answered:先看 evidence.filters。有 not_in_question 的条件,是模型自己加的、题目里没提: 告诉人模型加了什么、筛掉多少(before、after 是筛前筛后的个数);人要去掉就用 drop_filter 去掉重算(不调模型); 人定之前不要 fix_question。

  • open_items 里 model_filter 项带 requeried: true:已经去掉条件重算过,验收题里存的还是旧答案; 要问人的是“要不要用新答案替换验收题”(同意了用 fix_question),不要再 drop_filter。

  • answered 且 evidence.merged:告诉人哪几个对象被算成了一个。

  • no_data 且 evidence.found_elsewhere:这个值在别的对象里,建议人换那个对象再问。

  • query_limit、ontology_gap:看 reason_from_model。为 true 是模型的判断,换个说法最多再问一次;否则是代码查出来的原因,照 reason 告诉人。人要的话用 fix_question 记成必答题。

  • needs_derived:把公式和试算给人看,人同意后才 confirm_derived。

  • refused_by_card:是口径卡上的规则拒答,照 reason 告诉人,别换问法绕过。

  • evidence.card 里有 incomplete:对象在数据里只有一部分,转告人;lines 是答案按哪几条口径算的。

  • open_items 里除 model_filter、unjudged、card_blank 外的事都能记客户的答复(answered_items 是已记下的): 问人客户怎么答的,人说了再用 save_card 记;card_blank 用 get_card 看哪几格没说清。 unlinked 答“数据没导全”,服务会把另一端对象在卡上自动记成“只有一部分”,改答复时撤回,不用另发那一格。 判断只归人

  • confirm_ontology、fix_question、set_rules、confirm_derived、save_form、save_card 只在人明确说了之后调用,不替人编判断。

  • save_card 只记人说的客户答复:by、basis 都来自人,不替客户填格、不替他答。

  • 拿不准的事写成问题交给人,不要当成结论。

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
healthA

本机建模服务是否在跑、有没有模型凭据、是否在跑旧代码。

list_runsB

本机保存过的运行,新的在前。

preview_uploadA

不调用模型:看这几份文件会发给模型什么(字段名、示例值、代码在全部行上数出的计数、每行都不同的列和可能的连接)。

build_ontologyA

上传文件并建本体:模型提出、代码核验、数据体检、建三次比稳定性,并回答 purpose 里写的问题。给 previous 表示这是那次运行的新版本,沿用它的确认、验收问题和规则。会调用模型,等它跑完才返回;返回的概况同 run_overview,也带 open_items、answered_items、card。

run_overviewA

一次运行的概况:对象和关系数、体检通过几项、问答能答几道、稳定性、是否确认过;open_items 是要和客户确认的事(服务算好的清单,每项有 kind、ask、facts、from_model、target),先看它,是要带给人的事。answered_items 是已记下客户答复的事,card 是口径卡的格数 {cells, blank}(blank 是还没说清的格,看细节用 get_card)。服务是旧版本、没有这个清单时 open_items、answered_items 为 null,note 里说明;card 只有在旧版服务没有这条路由时才是 null,没有数据行的运行(文档、没通过核验)给 {cells:0, blank:0}。文档运行没有要和客户确认的事,也不会去请求这份清单和口径卡:open_items、answered_items 直接给 []。

list_objectsA

本体里的对象:名称、说明、来自哪些表、识别字段、数据里有多少个、几条关系、人的判断。人判错的默认不给,列在 left_out 里;include_wrong=true 全给。

object_fieldsC

一个对象的属性:每个字段的类型、长度、空值和来源表(交接到数据平台时要填的列)。

object_rowsB

一个对象在数据里的每一个实例,一页 20 个;all=true 一次给全部。

list_relationsA

本体里的关系:两端、含义、来源表、基数、人的判断。cardinality 是 one_to_one / one_to_many / many_to_one / many_to_many,方向是 from 到 to;reads 用两端对象的名字把它读成一句中文,most_from 是一个 from 对象最多对应几个 to,most_to 是一个 to 对象最多对应几个 from。判错的、或一端对象判错的默认不给,列在 left_out 里;include_wrong=true 全给。

suggest_relationsB

代码在数据里看到、本体里没有的关系,只作建议:同一行上的两个对象没连起来;某列写的是别的对象的名称(且指向的不是本行已连着的那个);或某列按名字和取值指向别的对象的编号。

find_instancesB

按名称或编号找数据里的某个对象(实例图谱的起点),给出节点 id;对象类型没有名称字段时 name 就是识别值。

instance_neighbourhoodB

实例图谱:一个对象的字段,和数据里与它相连的对象;每条关系先给 20 个,其余计数。

list_rulesB

代码在数据里找到的规则(某字段每个对象都有值;两个日期总是先后有序)和人采纳的规则,采纳的带本次数据里的违反数和例子。

set_rulesA

采纳或不要规则:adopted、declined 各写完整的规则 id 列表(id 来自 list_rules)。采纳的规则以后每次重跑都会检查。

draft_formA

让字段释义员起草对象表单里只有人能写的列:每个对象和字段的中文名、一句话描述、展示字段。一次模型调用;人写过的不会被覆盖。

save_formB

保存对象表单。form 形如 {"types": {"<对象key>": {"label": "中文名", "description": "描述", "display_field": "字段", "drafted": false, "fields": {"<字段>": {"label": "…", "description": "…", "drafted": false}}}}};drafted=false 表示人写的。

export_formsA

按对象表单导出:每个对象一张 CSV(主键、展示、中文名称、英文名称、描述、类型、长度、属性类型)和一份说明。导入契约还没实测,说明里写着导入前要测。文件写到本机的一个文件夹(out_dir,默认在下载文件夹里),同名覆盖,只返回文件的路径和字节数 {dir, files: [{name, path, bytes}], total_bytes, removed},不返回文件内容。文件夹里会留一份清单 .ontopoc-export.json,记着这一类导出这次写了哪些文件;再导出到同一个文件夹时,上次清单里有、这次没有的文件会被删掉(removed 是删掉的文件名),清单以外的文件不碰。文件名必须是单纯的文件名,否则整次导出报错、一个文件也不写。

export_mermaidA

组织架构模式的运行导出组织图(Mermaid):组织隶属.mmd(隶属、汇报、担任)和协作交接.mmd(协作、交接及交接内容)。years 写 2016-2022 只画这段时间的关系,没写时间的关系每段都画;判错的不画。文件写到本机的一个文件夹(out_dir,默认在下载文件夹里),同名覆盖,只返回文件的路径和字节数 {dir, files: [{name, path, bytes}], total_bytes, removed},不返回文件内容。文件夹里会留一份清单 .ontopoc-export.json,记着这一类导出这次写了哪些文件;再导出到同一个文件夹时,上次清单里有、这次没有的文件会被删掉(removed 是删掉的文件名),清单以外的文件不碰。文件名必须是单纯的文件名,否则整次导出报错、一个文件也不写。

export_ttlA

按 W3C 标准导出 Turtle:ontology.ttl(OWL 类、字段、关系、识别键)、data.ttl(每个对象按识别值命名,同一对象跨表跨版本同名)、shapes.ttl(采纳的规则写成 SHACL,有规则时才有)。判错的对象和关系不导出。文件写到本机的一个文件夹(out_dir,默认在下载文件夹里),同名覆盖,只返回文件的路径和字节数 {dir, files: [{name, path, bytes}], total_bytes, removed},不返回文件内容。文件夹里会留一份清单 .ontopoc-export.json,记着这一类导出这次写了哪些文件;再导出到同一个文件夹时,上次清单里有、这次没有的文件会被删掉(removed 是删掉的文件名),清单以外的文件不碰。文件名必须是单纯的文件名,否则整次导出报错、一个文件也不写。

export_pipeline_specA

生成编排需求单,交给搭管道的人:把体检、要确认的事、口径卡、派生指标和采纳的规则里已经说了的“这份数据要怎么加工才能算对”合成一份清单——每张表要做的清洗、表之间怎么关联、按期取数、计算列、编排后的校验、还没说清的;每条写明来源(代码查出、客户答复、人确认)。写出 编排需求单.md 和 编排需求单.json。只描述要做什么,不执行加工,不调用模型,没有模型 key 也能导出。文档运行和没通过核验的运行没有需求单,服务的说明作为工具错误原样返回。文件写到本机的一个文件夹(out_dir,默认在下载文件夹里),同名覆盖,只返回文件的路径和字节数 {dir, files: [{name, path, bytes}], total_bytes, removed},不返回文件内容。文件夹里会留一份清单 .ontopoc-export.json,记着这一类导出这次写了哪些文件;再导出到同一个文件夹时,上次清单里有、这次没有的文件会被删掉(removed 是删掉的文件名),清单以外的文件不碰。文件名必须是单纯的文件名,否则整次导出报错、一个文件也不写。

data_layoutB

上传的每张表:行数、跳过的标题行、每列类型长度空值;表没连上时,能把它们连起来的列。

data_checkB

数据体检:七项检查是否通过,以及每类发现的数量和前几个例子。全部由代码算。

ask_questionA

用数据回答一个业务问题:模型把问题写成查询,代码在数据上算答案。不给 question 就让模型出一组题。会调用模型,慢且花钱。每道题有 status:answered 答出来了;no_data 数据里没有满足条件的对象;query_limit 查询写不出来、ontology_gap 本体缺回答它要的东西(reason_from_model 为 true 时是模型的判断;否则是代码查出来的原因,照 reason 告诉人);needs_derived 要一个派生指标,derive 里是公式和试算,人同意后才 confirm_derived。evidence 是代码给的核对依据:filters 是查询里的筛选条件(before、after 是筛前筛后的对象数,removed_measure 是筛掉的那部分的合计),其中 not_in_question 的是模型自己加的、题目没提,该不该加由人定,不加用 drop_filter 去掉重算;merged 是被算成同一个的对象组(同一个名字下有几个不同的识别值);found_elsewhere 是 no_data 时,这个值在别的对象里能找到的地方。口径卡:refused_by_card 是被卡上的哪一格拒答的(status 是 query_limit,reason 是代码给的),照 reason 告诉人,不要换问法绕过;evidence.card 是答案用了哪张表、数据到哪天(tables)、按哪几条口径(lines),incomplete 是对象在数据里只有一部分,要转告人。

list_questionsA

这次运行里模型出的题(model_round)、人问过的题(asked)和固定的验收问题(acceptance),带答案和查询路径。每道题有 status:answered 答出来了;no_data 数据里没有满足条件的对象;query_limit 查询写不出来、ontology_gap 本体缺回答它要的东西(reason_from_model 为 true 时是模型的判断;否则是代码查出来的原因,照 reason 告诉人);needs_derived 要一个派生指标,derive 里是公式和试算,人同意后才 confirm_derived。evidence 是代码给的核对依据:filters 是查询里的筛选条件(before、after 是筛前筛后的对象数,removed_measure 是筛掉的那部分的合计),其中 not_in_question 的是模型自己加的、题目没提,该不该加由人定,不加用 drop_filter 去掉重算;merged 是被算成同一个的对象组(同一个名字下有几个不同的识别值);found_elsewhere 是 no_data 时,这个值在别的对象里能找到的地方。口径卡:refused_by_card 是被卡上的哪一格拒答的(status 是 query_limit,reason 是代码给的),照 reason 告诉人,不要换问法绕过;evidence.card 是答案用了哪张表、数据到哪天(tables)、按哪几条口径(lines),incomplete 是对象在数据里只有一部分,要转告人。

confirm_derivedA

确认一个派生指标(例如 金额 = 单价 × 数量 ×(1 − 折扣)):服务再核一遍公式,存下后重算等它的题。只在人看过公式和试算结果、同意之后调用;derive 用那道题返回的 derive 原样传。

fix_questionA

把问过的一道题固定为验收问题:以后重传同一份文件,用同一个查询再算一次。只在人明确说了之后调用。这道题的答案里有模型自己加的条件(evidence.filters 里 not_in_question、且筛掉了对象)时,note 不写就报错:先问人,不该加用 drop_filter 去掉重算,该加就在 note 里写明口径。

drop_filterA

去掉模型自己加在一道题上的一个条件,用本机代码重算,不调模型;新答案作为这道题新的一次追加到记录里并返回,想固定它再用 fix_question。用在人同意去掉模型自己加的条件之后(evidence.filters 里 not_in_question 的那些)。field、equals 两种写法都认:照 evidence.filters 里那一条写(字段不带表名),或照这道题 query.where 里那一条原样写(字段带不带表名以查询为准)。

confirm_ontologyA

保存人对本体的逐项判断,成为这个文件的参考本体并马上对照。decisions 形如 {"types": {"<对象key>": {"verdict": "ok"|"wrong", "label": "改名(可选)"}}, "relations": {"<关系key>": {"verdict": "ok"|"wrong"}}, "added": ["漏掉的对象名"]}。

compare_referenceB

拿一份人写的参考本体(JSON)和这次的本体对照:哪些对象、关系对上了,哪些多了、少了。

get_cardA

一次运行的口径卡(数据是什么意思):每张表一行是什么、日期列的最早最晚和空值、数值列的类型,以及已答复的格(answer:value、says、by、basis、at)和对象全不全。代码能算的已经算好,只有人能答的留空;blank 是还没说清的格数。文档运行没有卡,返回空的 tables。格的 value 只能是下面的值,种类看 id 冒号前的那段,等号后是意思:grain(一行是什么):one_object=一行就是一个对象、event=一行是一次事件或一次修改(同一个东西有多行)、period=一行是一段时期的汇总、unsure=说不清;date(日期列是什么时间):business=业务发生的日期、system=系统录入或修改的时间、fetched=取数的时间、unsure=说不清;amount(数值列能不能加):flow=每行是这一笔自己的数,可以跨行相加、running=每次事件后的累计值、latest=截至最近一次的值、period_to_date=期初到期末的累计值、not_amount=不是数量(编号或代码)、unsure=说不清;complete(对象全不全):full=数据里是全的、partial=数据里只有一部分、unsure=说不清。日期范围格 range 的 value 写 {"from": "YYYY-MM-DD" 或 null, "to": "YYYY-MM-DD" 或 null}。

save_cardA

记下客户对口径卡的答复,也可以记下“要确认的事”里能答复的事的答复。只记人说的客户答复:by(答复人)和 basis(出处)都来自人,不要自己填格,不要替客户答,不要按列名猜;只在人明确说了之后调用。校验不过整次不写,服务的说明原样返回。cells 每项 {id, value, note?, basis?}:id 来自 get_card,value 是那一格可选的值,null 表示清空。格的 value 只能是下面的值,种类看 id 冒号前的那段,等号后是意思:grain(一行是什么):one_object=一行就是一个对象、event=一行是一次事件或一次修改(同一个东西有多行)、period=一行是一段时期的汇总、unsure=说不清;date(日期列是什么时间):business=业务发生的日期、system=系统录入或修改的时间、fetched=取数的时间、unsure=说不清;amount(数值列能不能加):flow=每行是这一笔自己的数,可以跨行相加、running=每次事件后的累计值、latest=截至最近一次的值、period_to_date=期初到期末的累计值、not_amount=不是数量(编号或代码)、unsure=说不清;complete(对象全不全):full=数据里是全的、partial=数据里只有一部分、unsure=说不清。日期范围格 range 的 value 写 {"from": "YYYY-MM-DD" 或 null, "to": "YYYY-MM-DD" 或 null}。items 每项 {id, choice?, text?, basis?}:id 来自 run_overview 的 open_items,choice 的可选值看事的种类(unlinked:expected、incomplete;same_name、merged:distinct、same),没有 choice 时 text 必填。unlinked 答“数据没导全”(incomplete)时,服务会自动把另一端对象在卡上记成“只有一部分”,改答复时撤回,不用另发那一格。cells 和 items 至少给一样。写完返回 {card, items, answered}。

find_name_variantsA

找出同一类对象里可能是同一个东西的不同写法,只给建议、不合并。会调用模型。

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.4/5.0

Scored across 32 tools

Disambiguation4/5

Most tools have sharply distinct roles (build vs inspect vs answer vs export), and the verbose Chinese descriptions spell out preconditions and return shapes. A few pairs could still be confused: find_instances vs object_rows (lookup by name vs enumerate all instances), and the ask_question / list_questions / fix_question / drop_filter cluster requires careful reading to pick correctly.

Naming Consistency4/5

Everything is uniformly snake_case and most names follow verb_noun (find_instances, list_objects, save_card, set_rules, build_ontology, export_ttl). The deviations are noun-only names like health, data_check, data_layout, object_rows, run_overview, which form a recognizable secondary pattern rather than random mixing.

Tool Count2/5

32 tools is heavy for one server, and there is clear bloat: the four export_* tools repeat an identical ~200-character paragraph about out_dir, manifest files and overwrite semantics, and card/question tooling is split across many narrow operations. The multi-phase workflow (ingest, model, verify, answer, export) justifies breadth, but the surface should be consolidated.

Completeness4/5

The surface covers the full lifecycle: preview upload, build ontology, health-check data, confirm types/relations/rules, answer questions with derived-metric approval, record customer answers, and export to CSV/Mermaid/Turtle/pipeline spec. Minor gaps: no way to delete or re-run a stored run, and instance-level data export beyond per-object forms is absent.

Maintenance

ActivityActive
ResponsivenessNo recent community issues