corpus
Read-only MCP access to Vela's corpus of human experience: cited passages, coordinates, reading path
我該用這個嗎
品質與安全性
發現項目(10)
- LOW在 vela.corpus.query 中
- LOW在 vela.library.reading_list 中
- LOW在 vela.corpus.list_topics 中
- LOW在 vela.corpus.describe_topic 中
- LOW在 vela.corpus.ground_claim 中
- LOW在 vela.corpus.witness 中
- LOW在 vela.magazine.sequence_path 中
- LOW在 vela.magazine.relation_floor 中
- LOW在 vela.research.list_studies 中
- LOW在 vela.research.get_study 中
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"corpus": {
"url": "https://vela.study/mcp"
}
}
}遠端端點
https://vela.study/mcpstreamable-http它能做什麼
工具清單
工具(10)
🟢vela.corpus.query(topic, axes, themes, qualities, genre, ...)
Ask the corpus by COORDINATE rather than keyword. Filter works by axis weights (e.g. religion ∈ {T,s} AND work ∈ {T,s} returns the God-and-Work source set across genres), controlled themes, qualities/emotions, genre, and free text. Returns card metadata: the one-line claim, themes, coordinates, qualities. FREE and read-only. [capability: library-extraction-cards · mirrors: POST /api/corpus/query]
輸入結構描述
{
"type": "object",
"properties": {
"topic": {
"default": "being-human",
"description": "Coordinate system to query (topic_configs.slug).",
"type": "string"
},
"axes": {
"description": "Axis → allowed weights. ALL listed axes must match. e.g. {\"religion\":[\"T\",\"s\"],\"work\":[\"T\",\"s\"]}",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
},
"themes": {
"description": "Cards citing ANY of these controlled themes.",
"type": "array",
"items": {
"type": "string"
}
},
"qualities": {
"description": "Cards carrying ANY of these qualities (emotions, for being-human).",
"type": "array",
"items": {
"type": "string"
}
},
"genre": {
"type": "string"
},
"text": {
"description": "Substring match over title / author / one-line claim.",
"type": "string"
},
"include_passages": {
"default": false,
"description": "Include theme-anchored passage pointers.",
"type": "boolean"
},
"limit": {
"default": 50,
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"default": 0,
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}輸出結構描述
{
"type": "object",
"properties": {
"topic": {
"type": "string"
},
"total": {
"type": "number"
},
"returned": {
"type": "number"
},
"hits": {
"type": "array",
"items": {
"type": "object",
"properties": {
"sourceSlug": {
"type": "string"
},
"libraryId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"type": "string"
},
"author": {
"type": "string"
},
"year": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"genre": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"oneLineClaim": {
"type": "string"
},
"themes": {
"type": "array",
"items": {
"type": "string"
}
},
"coordinates": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"qualities": {
"type": "array",
"items": {
"type": "string"
}
},
"signaturePassages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"theme": {
"type": "string"
},
"quote": {
"type": "string"
}
},
"required": [
"code",
"theme",
"quote"
],
"additionalProperties": false
}
},
"url": {
"type": "string"
}
},
"required": [
"sourceSlug",
"libraryId",
"title",
"author",
"year",
"genre",
"oneLineClaim",
"themes",
"coordinates",
"qualities"
],
"additionalProperties": {}
}
},
"truncated": {
"type": "boolean"
},
"applied": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"topic",
"total",
"returned",
"hits",
"applied"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢vela.library.reading_list(emotion, theme, limit)
The reading list an emotion or theme page shows: books with one-line claims and a short attributed passage (≤300 chars). Exactly one of emotion or theme. FREE and read-only. Every url carries ?ref=mcp for citation arrival measurement. [capability: library-extraction-cards · mirrors: GET /api/corpus/reading-list]
輸入結構描述
{
"type": "object",
"properties": {
"emotion": {
"description": "Emotion primary slug (e.g. grief). Mutually exclusive with theme.",
"type": "string"
},
"theme": {
"description": "Controlled theme slug (e.g. desire). Mutually exclusive with emotion.",
"type": "string"
},
"limit": {
"default": 24,
"type": "integer",
"minimum": 1,
"maximum": 24
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}輸出結構描述
{
"type": "object",
"properties": {
"ok": {
"type": "boolean",
"const": true
},
"kind": {
"type": "string",
"enum": [
"emotion",
"theme"
]
},
"slug": {
"type": "string"
},
"limit": {
"type": "number"
},
"rows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"year": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"claim": {
"type": "string"
},
"passage": {
"type": "object",
"properties": {
"quote": {
"type": "string"
},
"theme": {
"type": "string"
}
},
"required": [
"quote",
"theme"
],
"additionalProperties": false
},
"url": {
"type": "string"
},
"slug": {
"type": "string"
}
},
"required": [
"title",
"author",
"year",
"claim",
"passage",
"url",
"slug"
],
"additionalProperties": false
}
}
},
"required": [
"ok",
"kind",
"slug",
"limit",
"rows"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢vela.corpus.list_topics
List the coordinate systems the corpus can be queried through — each with its thesis, axes, and controlled vocabularies. Call this before vela.corpus.query to learn what axes and themes exist. FREE and read-only. [capability: topic-coordinate-systems · mirrors: GET /api/corpus/topics]
輸入結構描述
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}輸出結構描述
{
"type": "object",
"properties": {
"topics": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"thesis": {
"type": "string"
},
"axes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"label": {
"type": "string"
},
"description": {
"type": "string"
}
},
"required": [
"key",
"label"
],
"additionalProperties": {}
}
},
"axisWeights": {
"type": "array",
"items": {
"type": "string"
}
},
"themeCount": {
"type": "number"
},
"qualityCount": {
"type": "number"
}
},
"required": [
"slug",
"name",
"axes",
"axisWeights",
"themeCount",
"qualityCount"
],
"additionalProperties": false
}
}
},
"required": [
"topics"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢vela.corpus.describe_topic(topic)
Describe ONE topic in full — its axes and their operative definitions, its complete controlled theme and quality vocabularies, plus the vocabulary actually IN USE across the corpus with counts. The declared vocabulary and the used vocabulary are different facts; this returns both. FREE and read-only. [capability: topic-coordinate-systems · mirrors: GET /api/corpus/topics/:slug]
輸入結構描述
{
"type": "object",
"properties": {
"topic": {
"default": "being-human",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}輸出結構描述
{
"type": "object",
"properties": {
"declared": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"thesis": {
"type": "string"
},
"axes": {
"type": "array",
"items": {}
},
"themes": {
"type": "array",
"items": {}
},
"qualities": {
"type": "array",
"items": {}
},
"axisWeights": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"slug",
"name",
"axes",
"themes",
"qualities"
],
"additionalProperties": {}
},
"inUse": {
"type": "object",
"properties": {
"cards": {
"type": "number"
},
"themes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"count": {
"type": "number"
}
},
"required": [
"slug",
"count"
],
"additionalProperties": false
}
},
"qualities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"count": {
"type": "number"
}
},
"required": [
"slug",
"count"
],
"additionalProperties": false
}
},
"genres": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"count": {
"type": "number"
}
},
"required": [
"slug",
"count"
],
"additionalProperties": false
}
},
"axes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weights": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "number"
}
}
},
"required": [
"key",
"weights"
],
"additionalProperties": false
}
}
},
"required": [
"cards",
"themes",
"qualities",
"genres",
"axes"
],
"additionalProperties": {}
}
},
"required": [
"declared",
"inUse"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢vela.corpus.ground_claim(claim, limit)
Ground a claim in the corpus: hybrid semantic + theme retrieval over real passages, returning citations with source, passage code, scores, and a SHORT snippet. Use to check whether the corpus supports, complicates or is silent on an assertion. COSTS a small amount (one embedding per call). [capability: corpus-ingestion-dual-grade · mirrors: internal — lib/audit/retrieve.ts]
輸入結構描述
{
"type": "object",
"properties": {
"claim": {
"type": "string",
"minLength": 3,
"description": "The claim to ground."
},
"limit": {
"default": 8,
"type": "integer",
"minimum": 1,
"maximum": 20
}
},
"required": [
"claim"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}輸出結構描述
{
"type": "object",
"properties": {
"claim": {
"type": "string"
},
"hits": {
"type": "array",
"items": {
"type": "object",
"properties": {
"passageCode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"sourceTitle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"themes": {
"type": "array",
"items": {
"type": "string"
}
},
"score": {
"type": "number"
},
"rationale": {
"type": "string"
},
"snippet": {
"type": "string"
},
"snippetTruncated": {
"type": "boolean"
}
},
"required": [
"passageCode",
"sourceTitle",
"themes",
"score",
"rationale",
"snippet",
"snippetTruncated"
],
"additionalProperties": false
}
}
},
"required": [
"claim",
"hits"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢vela.corpus.witness(themes, emotions, axes, problem_slug, condition_slug, ...)
Literary Witness Rail (ASN-1577): return passages and one-line claims from Vela's 762-work corpus that illuminate the given themes and/or emotions. Designed for frame-family profile pages — PersonFrame × ProblemFrame × ConditionFrame — to add an inside-out layer (what writers who lived this say) alongside the outside-in portrait the frame join produces. Results carry evidence_grade 'T1' (single-extractor) until PRN-282 lands. FREE for claims; costs one embedding for the passage path. [capability: literary-witness · mirrors: GET /api/vela/witness]
輸入結構描述
{
"type": "object",
"properties": {
"themes": {
"description": "Controlled themes from Vela's vocabulary (e.g. 'fairness', 'recognition').",
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"emotions": {
"description": "Emotions to match (e.g. 'shame', 'betrayal', 'grief'). At least one of themes or emotions is required.",
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"axes": {
"description": "Axis weight filters for claims only — same format as vela.corpus.query (e.g. {work:[\"T\",\"s\"]}).",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
},
"problem_slug": {
"description": "ProblemFrame entity slug (echoed in response; reserved for frame_tags[] pre-cache after PA-1153 ID-freeze).",
"type": "string"
},
"condition_slug": {
"description": "ConditionFrame entity slug (same reservation as problem_slug).",
"type": "string"
},
"max_passages": {
"default": 5,
"description": "Max passages to return (default 5).",
"type": "integer",
"minimum": 1,
"maximum": 10
},
"max_claims": {
"default": 3,
"description": "Max one-line claims to return (default 3).",
"type": "integer",
"minimum": 1,
"maximum": 8
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}輸出結構描述
{
"type": "object",
"properties": {
"passages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"passage_code": {
"type": "string"
},
"text": {
"type": "string"
},
"source_title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"charge": {
"type": "number"
},
"themes": {
"type": "array",
"items": {
"type": "string"
}
},
"page_range": {
"type": "null"
}
},
"required": [
"passage_code",
"text",
"source_title",
"author",
"charge",
"themes",
"page_range"
],
"additionalProperties": false
}
},
"claims": {
"type": "array",
"items": {
"type": "object",
"properties": {
"claim": {
"type": "string"
},
"source_title": {
"type": "string"
},
"author": {
"type": "string"
},
"themes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"claim",
"source_title",
"author",
"themes"
],
"additionalProperties": false
}
},
"evidence_grade": {
"type": "string",
"const": "T1"
},
"query": {
"type": "object",
"properties": {
"themes": {
"type": "array",
"items": {
"type": "string"
}
},
"emotions": {
"type": "array",
"items": {
"type": "string"
}
},
"axes": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
},
"problem_slug": {
"type": "string"
},
"condition_slug": {
"type": "string"
}
},
"required": [
"themes",
"emotions"
],
"additionalProperties": {}
}
},
"required": [
"passages",
"claims",
"evidence_grade",
"query"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢vela.magazine.sequence_path(emotions, forms, property, limit)
Ask what this magazine would actually give a reader who said they wanted these things. Returns the REAL sequenced path with the rationale for each piece — the same core the anonymous intake calls, not a preview. Read-only: writes nothing and records no signal. [capability: adaptive-magazine-engine · mirrors: POST /api/magazine/start-path]
輸入結構描述
{
"type": "object",
"properties": {
"emotions": {
"description": "Emotions the reader is steering by.",
"maxItems": 12,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 64
}
},
"forms": {
"description": "Article forms to steer by. At least one of emotions/forms is required.",
"maxItems": 12,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 64
}
},
"property": {
"description": "Property id; defaults to vela.",
"type": "string",
"minLength": 1,
"maxLength": 64
},
"limit": {
"description": "Pieces to return (default 4).",
"type": "integer",
"minimum": 1,
"maximum": 12
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}輸出結構描述
{
"type": "object",
"properties": {
"property": {
"type": "string"
},
"path": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"slug": {
"type": "string"
},
"title": {
"type": "string"
},
"rationale": {
"type": "string"
},
"personalized": {
"type": "boolean"
}
},
"required": [
"id",
"slug",
"title",
"rationale",
"personalized"
],
"additionalProperties": false
}
}
},
"required": [
"property",
"path"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢vela.magazine.relation_floor(property)
Whether a magazine's corpus can support the adaptive promise its pages render. Reports, per property, each relational dimension's fill AND its separating power — a field present on every piece with one distinct value carries no information, so fill rate alone is misleading. Read-only. [capability: adaptive-magazine-engine · mirrors: npm run magazine:relation-floor]
輸入結構描述
{
"type": "object",
"properties": {
"property": {
"description": "Restrict to one property id; omit for every property with published pieces.",
"type": "string",
"minLength": 1,
"maxLength": 64
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}輸出結構描述
{
"type": "object",
"properties": {
"properties": {
"type": "array",
"items": {
"type": "object",
"properties": {
"property": {
"type": "string"
},
"published": {
"type": "number"
},
"dimensions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"key": {
"type": "string"
},
"fill": {
"type": "number"
},
"distinct": {
"type": "number"
},
"separation": {
"type": "number"
},
"usable": {
"type": "boolean"
},
"verdict": {
"type": "string"
}
},
"required": [
"name",
"key",
"fill",
"distinct",
"separation",
"usable",
"verdict"
],
"additionalProperties": false
}
},
"curatorConfirmed": {
"type": "number"
},
"usableCount": {
"type": "number"
},
"inert": {
"type": "boolean"
}
},
"required": [
"property",
"published",
"dimensions",
"curatorConfirmed",
"usableCount",
"inert"
],
"additionalProperties": false
}
}
},
"required": [
"properties"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢vela.research.list_studies
List FieldStation research ideas as a library-kit DiscoveryDTO. Each card is a study we can support, not a running participant surface. The honesty gate (limitations, readiness, doNotClaim) is enforced by research:catalog-check — this tool publishes that same file. FREE and read-only. Presence is gated; truth is not. [capability: study-catalogue · mirrors: GET /api/research/studies]
輸入結構描述
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}輸出結構描述
{
"type": "object",
"properties": {
"ok": {
"type": "boolean",
"const": true
},
"note": {
"type": "string"
},
"problems": {
"type": "array",
"items": {
"type": "string"
}
},
"sendable": {
"type": "number"
},
"count": {
"type": "number"
},
"discovery": {
"type": "object",
"properties": {
"facetGroups": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"heading": {
"type": "string"
},
"combine": {
"type": "string",
"enum": [
"and",
"or"
]
},
"facets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": "string"
},
"label": {
"type": "string"
},
"count": {
"type": "number"
}
},
"required": [
"value",
"label",
"count"
],
"additionalProperties": false
}
}
},
"required": [
"key",
"heading",
"combine",
"facets"
],
"additionalProperties": false
}
},
"cards": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"href": {
"type": "string"
},
"eyebrow": {
"type": "string"
},
"title": {
"type": "string"
},
"claim": {
"type": "string"
},
"chips": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"label": {
"type": "string"
}
},
"required": [
"slug",
"label"
],
"additionalProperties": false
}
}
},
"required": [
"id",
"href",
"eyebrow",
"title",
"claim"
],
"additionalProperties": false
}
},
"labels": {
"type": "object",
"properties": {
"filterHeading": {
"type": "string"
},
"clear": {
"type": "string"
},
"resultNoun": {
"type": "array",
"items": [
{
"type": "string"
},
{
"type": "string"
}
]
}
},
"required": [
"filterHeading",
"clear",
"resultNoun"
],
"additionalProperties": false
}
},
"required": [
"facetGroups",
"cards",
"labels"
],
"additionalProperties": false
},
"studies": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"claim": {
"type": "string"
},
"repo": {
"type": "string"
},
"readiness": {
"type": "string"
},
"ethicsBurden": {
"type": "string"
},
"stage": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"disciplines": {
"type": "array",
"items": {
"type": "string"
}
},
"needs": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"id",
"title",
"claim",
"repo",
"readiness",
"ethicsBurden",
"stage",
"disciplines",
"needs"
],
"additionalProperties": false
}
}
},
"required": [
"ok",
"note",
"problems",
"sendable",
"count",
"discovery",
"studies"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢vela.research.get_study(id)
One FieldStation study as a library-kit ProfileDTO plus the raw StudyRecord. Unknown id is an error. FREE and read-only. [capability: study-catalogue · mirrors: GET /api/research/studies/:id]
輸入結構描述
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "Catalogue id, e.g. S-01."
}
},
"required": [
"id"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}輸出結構描述
{
"type": "object",
"properties": {
"ok": {
"type": "boolean",
"const": true
},
"note": {
"type": "string"
},
"problems": {
"type": "array",
"items": {
"type": "string"
}
},
"profile": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"author": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"year": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"kicker": {
"type": "string"
},
"body": {
"type": "array",
"items": {
"type": "object",
"properties": {
"kind": {
"type": "string"
}
},
"required": [
"kind"
],
"additionalProperties": {}
}
},
"meta": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"description": {
"type": "string"
}
},
"required": [
"title",
"description"
],
"additionalProperties": false
}
},
"required": [
"id",
"title",
"author",
"year",
"kicker",
"body",
"meta"
],
"additionalProperties": {}
},
"study": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"claim": {
"type": "string"
}
},
"required": [
"id",
"title",
"claim"
],
"additionalProperties": {}
}
},
"required": [
"ok",
"note",
"problems",
"profile",
"study"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}社群
證據