project_query
List accessible projects, read one project by stable id, re-find a project by exact name, or inspect canonical Novel source, Adaptation Blueprint, Chapter, manuscript, Voice, audit, canon, candidate, and export-readiness state.
When to use
Use when the caller wants lightweight project discovery, one project summary, or to recover a project id by exact name before follow-up mutations.
Use `mode=novel` plus `novel_mode` for read-only Novel workflow state and prose-bearing resources.
Use `novel_mode=changes` after a Novel Audit to inspect pending Chapter-plan proposals; after the full changes resource is reviewed, the query returns explicit apply and reject calls only for a revision-current pending proposal.
When not to use
Do not use for screenplay content or story-graph mutations.
Examples
“List my projects.”
“Read the project with id 123.”
“Find the project named Scenario MCP Test.”
“Read the canonical manuscript Chapter with `mode=novel`, `novel_mode=manuscript_chapter`, and `chapter_card_id`.”
“Read the canonical Adaptation Blueprint with `mode=novel` and `novel_mode=blueprint`.”
Anti-examples
- Rewrite scene 5 in my screenplay.
Backend capabilities
Linked resources
Tool calls may return resource_links pointing at these resource families.
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"required": [
"mode"
],
"properties": {
"mode": {
"type": "string",
"enum": [
"list",
"get",
"name_exact",
"search",
"novel"
]
},
"project_id": {
"type": "integer"
},
"name": {
"type": "string"
},
"query": {
"type": "string"
},
"cursor": {
"type": [
"string",
"null"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200
},
"novel_mode": {
"type": "string",
"enum": [
"source",
"blueprint",
"chapters",
"chapter_graph",
"manuscript",
"manuscript_chapter",
"candidates",
"voice",
"audit_runs",
"changes",
"canon",
"export_readiness"
]
},
"chapter_card_id": {
"type": "integer",
"minimum": 1
}
},
"allOf": [
{
"if": {
"properties": {
"mode": {
"const": "get"
}
}
},
"then": {
"required": [
"project_id"
]
}
},
{
"if": {
"properties": {
"mode": {
"const": "name_exact"
}
}
},
"then": {
"required": [
"name"
]
}
},
{
"if": {
"properties": {
"mode": {
"const": "search"
}
}
},
"then": {
"required": [
"query"
]
}
},
{
"if": {
"properties": {
"mode": {
"const": "novel"
}
},
"required": [
"mode"
]
},
"then": {
"required": [
"project_id",
"novel_mode"
]
}
},
{
"if": {
"properties": {
"mode": {
"const": "novel"
},
"novel_mode": {
"const": "manuscript_chapter"
}
},
"required": [
"mode",
"novel_mode"
]
},
"then": {
"required": [
"chapter_card_id"
]
}
}
],
"additionalProperties": false
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"required": [
"mode"
],
"properties": {
"mode": {
"type": "string"
},
"projects": {
"type": "array",
"items": {
"type": "object"
}
},
"project": {
"type": "object"
},
"project_id": {
"type": [
"integer",
"null"
]
},
"project_name": {
"type": [
"string",
"null"
]
},
"project_mode": {
"type": [
"string",
"null"
]
},
"project_updated_at": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"recommended_screenplay_workflow": {
"type": [
"string",
"null"
],
"description": "Recommended screenplay_generation_run workflow for this project's template mode."
},
"template_pipeline": {
"type": "object",
"description": "Compact MCP routing hints derived from the project's template pipeline."
},
"project_summary": {
"type": [
"object",
"null"
],
"description": "Compact 'what already exists' signal for a single-project get: derived `state` (empty_project | story_outline_ready | screenplay_ready | media_ready | active_job) and `card_counts` (story_cards, scenes, episodes, screenplay, shots, media). Use it to avoid re-running a stage whose output already exists.",
"properties": {
"state": {
"type": [
"string",
"null"
]
},
"card_counts": {
"type": "object"
}
}
},
"match_count": {
"type": "integer"
},
"next_cursor": {
"type": [
"string",
"null"
]
},
"resource_links": {
"type": "array",
"items": {
"type": "object"
}
}
},
"additionalProperties": true
}