Skip to main content
Glama
PrattyT85

theosis-oracc-mcp

by PrattyT85

theosis-oracc-mcp

Read-only MCP server wrapper for the ORACC (Open Richly Annotated Cuneiform Corpus) JSON archive API, built for integration with the Theosis theological research stack.

Features

  • list_projects — List public ORACC projects with optional filtering

  • get_project_metadata — Project config, formats, and witnesses

  • get_project_manifest — Available JSON files for a project

  • list_project_texts — Catalogue entries with designation, language, period, genre

  • get_text — Bounded CDL excerpt with transliteration and translation

  • search_project — Search catalogue by designation, author, or title

Related MCP server: catalogue-api

Setup

uv sync
uv run python -m oracc_mcp.server  # stdio transport

Or add to your Hermes config:

mcp:
  servers:
    oracc-mcp:
      transport: stdio
      command: uv
      args: ["--directory", "/path/to/theosis-oracc-mcp", "run", "python", "-m", "oracc_mcp.server"]

Testing

uv run pytest -v                    # offline tests only
uv run pytest -m live -v           # live tests (ORACC_LIVE=1 required)
ORACC_LIVE=1 uv run pytest -m live -v

ORACC Attribution

This server is a read-only client for the ORACC JSON archive API. projects.json is used for discovery; project metadata, catalogues, corpora, and text editions are read from the current /json/<project-archive>.zip downloads. Archives are bounded and cached only in memory for the lifetime of one client; they are not persisted or redistributed. Results include the archive URL and member path as provenance. ORACC data is provided by the University of Pennsylvania and its project contributors; follow the licence and attribution for the specific source.

Citation: Steve Tinney & Eleanor Robson, 'Oracc JSON Data: A brief introduction for programmers', Oracc: The Open Richly Annotated Cuneiform Corpus, Oracc, 2019 [http://oracc.museum.upenn.edu/doc/opendata/json/]

License

MIT — see LICENSE.

Available Tools

6 tools
get_project_manifestA

Get the JSON manifest listing available files for a project.

Args: project: ORACC project identifier.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'Get the JSON manifest' and gives the parameter, but does not mention that this is a read-only operation (implied but not stated), what the manifest specifically contains beyond 'available files', any error conditions, or required permissions. The description adds little behavioral context beyond the tool name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: one sentence and a parameter line. It is front-loaded with the primary purpose and contains no fluff. Every sentence earns its place, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one parameter, output schema exists), so the description covers the basics: purpose and parameter. However, given the presence of several sibling tools, it does not clarify when this tool is the right choice over others (e.g., list_project_texts or get_project_metadata). The output schema likely handles return values, but the usage ambiguity leaves a gap in completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. It provides a concise parameter definition: 'project: ORACC project identifier.' This tells the agent the parameter's type (identifier) and domain (ORACC), which is sufficient for correct invocation. While it could include format examples, it covers the essential meaning well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get the JSON manifest listing available files for a project.' It clearly differentiates the tool's function (retrieving a manifest of available files) from siblings like get_project_metadata. The scope is explicit (per project), so an agent can immediately understand its purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus the sibling tools (list_projects, get_project_metadata, list_project_texts, get_text, search_project). The description does not mention any conditions, exclusions, or alternatives, leaving the agent to infer the appropriate context. This is a significant gap given the overlapping sibling set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_metadataA

Get metadata for an ORACC project (config, formats, witnesses).

Args: project: ORACC project identifier (e.g. 'rimanum' or 'aemw/alalakh/idrimi').

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. The verb 'Get' indicates a read operation, and the parenthetical '(config, formats, witnesses)' clarifies what kind of metadata is returned. However, it does not disclose potential errors, authentication needs, or any other behavioral edge cases beyond the basic retrieval nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and effective: a single clear sentence defining the tool's purpose followed by a directly relevant Args section. There is no filler or repetition of the input schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter tool with an output schema, the description provides enough information to invoke it correctly: the parameter is explained with examples, and the return shape is presumably covered by the output schema. The main missing piece is any relationship or contrast with sibling tools like get_project_manifest, which would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only defines 'project' as a string with no description, so the argument documentation is essential and fully compensates. The description explains the parameter is an 'ORACC project identifier' and gives concrete examples ('rimanum' or 'aemw/alalakh/idrimi'), which makes the expected format unambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get metadata for an ORACC project', and lists the metadata categories (config, formats, witnesses). This is clear enough to understand what the tool does, though it does not explicitly distinguish itself from the sibling get_project_manifest, which could plausibly return overlapping data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives such as get_project_manifest or list_project_texts. The description implies it is for fetching project metadata but provides no conditions, exclusions, or preferred alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_textB

Get a bounded excerpt of an ORACC text edition (CDL structure).

Returns source URL, text ID, project, and transliteration/translation text where available. The response is capped to keep output manageable.

Args: project: ORACC project identifier. text_id: ORACC text ID (e.g. 'P295625').

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYes
text_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses that the response is capped/bounded, that fields are returned 'where available,' and that the response includes source URL, text ID, project, and transliteration/translation. It does not mention error behavior, auth needs, or how the excerpt boundary is determined, but the core behavioral traits are present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core action, followed by return summary and parameter details. Every sentence adds useful information; there is no filler or redundant restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool with an output schema, the description covers the main essentials: what is fetched, what is returned, and the bounded/capped nature of the response. It does not explain how to discover project identifiers or what happens when text_id is not found, but these are minor gaps given the output schema and sibling context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the parameter meanings. It provides brief definitions for both project and text_id, plus a concrete example for text_id ('P295625'). However, project is only called an 'ORACC project identifier' without examples or a pointer to list_projects, and no format constraints are given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Get a bounded excerpt of an ORACC text edition (CDL structure).' It also lists return fields, making the function's purpose clear. It does not explicitly name sibling tools to differentiate, but the contrast with list_projects, search_project, etc., is inferable from the content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says what the tool returns and that the response is capped, but gives no guidance on when to choose this over list_project_texts, search_project, or other siblings. There are no exclusions, prerequisites, or explicit alternative routing, so an agent must infer usage context from the tool name and siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_projectsA

List ORACC public projects, optionally filtered by name substring.

Args: query: Optional case-insensitive substring filter. limit: Max projects to return (default 50).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the transparency burden. It reveals the tool is a read-only public listing via 'List' and 'public', and it documents filtering and limit behavior. However, it does not address pagination, sort order, empty results, or error behavior; these are minor but unaddressed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences plus an Args block – every word adds information. It front-loads the core action and keeps parameter details compact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple parameter set and an output schema, the description covers the essentials: what, filter, and limit. It omits explicit caveats about pagination or result size, but for a basic list tool this is close to complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description compensates by explaining both parameters: 'query' is a case-insensitive substring filter and 'limit' caps the result count with a default of 50. This adds essential meaning beyond the bare schema types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'List ORACC public projects' – a clear verb + resource. It specifies the public scope and the optional name-substring filter, which distinguishes it from sibling tools that retrieve metadata, manifests, texts, or search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or alternative guidance appears anywhere in the description. It does not mention search_project or other siblings, leaving the agent to infer when listing is preferable to searching.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_textsA

List texts in a project's catalogue with key metadata (designation, language, period, genre).

Args: project: ORACC project identifier. query: Optional case-insensitive substring filter on designation. limit: Max texts to return (default 50).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
projectYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It discloses meaningful behavior: returning key metadata fields, case-insensitive substring filtering on designation, and a default limit of 50. This goes beyond a bare statement of purpose, though it does not mention pagination, ordering, or error behavior. Given the output schema exists, the missing return details are less critical.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a one-sentence summary in the first line followed by a concise Args list. Every sentence adds value and there is no repetition of schema information or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with three parameters and an output schema, the description covers the essentials: purpose, parameter meanings, and key behavior (case-insensitive filter, default limit). It does not discuss pagination or sorting, but these are not necessarily required given the output schema exists and the tool's scope is narrow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does fully. It provides clear semantics for all three parameters: project is an ORACC project identifier, query is an optional case-insensitive substring filter on designation, and limit is the max texts to return with a default of 50. This is exactly the kind of meaning the raw schema cannot convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: 'List texts in a project's catalogue with key metadata'. This clearly distinguishes it from list_projects and get_project_metadata, and 'key metadata' implies it returns catalogue-level information rather than full text. However, it does not explicitly differentiate from search_project, leaving some potential ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly conveys when to use the tool: when you need a list of texts with metadata from a project catalogue. The parameter descriptions add context about filtering and limiting. There are no explicit exclusions or references to alternatives, but the core use case is clear enough for an agent to choose it over obvious siblings like list_projects or get_text.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_projectA

Search a project's catalogue for texts matching a query (designation, author, or title).

Args: project: ORACC project identifier. query: Case-insensitive search term. limit: Max results (default 20).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
projectYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It does add useful behavioral traits like 'Case-insensitive search term' and the default for limit, but it does not state that the operation is read-only, what the response format is, whether pagination is supported, or any failure modes. For a tool with zero annotation support, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tight and front-loaded: a one-sentence purpose statement followed by a clean Args list. Every sentence earns its place, with no fluff or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, three-parameter search tool with an output schema present, the description covers everything needed to invoke it correctly: what it searches, the meaning of each parameter, and the default limit. It doesn't need to explain return values because the output schema exists. The only missing context is why/when to choose this over sibling tools, but that is already captured under usage_guidelines.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, but the description fully compensates by explaining all three parameters: 'project: ORACC project identifier', 'query: Case-insensitive search term', and 'limit: Max results (default 20)'. This adds semantic meaning beyond the raw schema and explicitly notes the default behavior for limit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Search'), a specific resource ('a project's catalogue'), and the object of the search ('texts matching a query'), along with the searchable fields (designation, author, or title). This clearly distinguishes it from sibling tools like list_project_texts, which lists texts without a query filter, and get_text, which retrieves a specific text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when you need to find texts by query terms) but provides no explicit guidance on when to prefer it over alternatives such as list_project_texts or get_text. There are no exclusion criteria or 'use X instead' statements, leaving the routing decision to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv0.1.0
    • First observedget_project_manifest
    • First observedget_project_metadata
    • First observedget_text
    • First observedlist_project_texts
    • First observedlist_projects
    • First observedsearch_project

TDQS

A3.9/5.0

Scored across 6 tools

Disambiguation4/5

Each tool targets a distinct resource or action, but list_project_texts and search_project both query the project catalogue and could be confused. The descriptions make the browse-versus-search distinction clear, so this is only a minor overlap.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case: list, get, and search verbs are applied predictably to projects, metadata, manifests, texts, and project text lists. There are no abrupt style or casing changes.

Tool Count5/5

Six tools is a well-scoped set for a read-only ORACC corpus access server. Each tool covers a meaningful step in the workflow from discovering projects to retrieving text content, with no obvious redundancy.

Completeness4/5

The tool surface covers project discovery, metadata, file manifests, text listing, text retrieval, and catalogue search, which forms a complete read-only workflow. The main limitation is that get_text only returns a bounded excerpt rather than full text editions, but this appears intentional for output management.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides read-only access to Cordra digital object repositories, enabling AI assistants to explore schemas, retrieve objects, and search using Lucene queries.
    1
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Provides a read-only API over a book catalogue, offering tools to search books, retrieve book details and series, and inspect provenance and source agreement data.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables MCP clients to query a local drill-down work map and knowledge graph, supporting work map, project context, related projects, reuse finding, search, and graph statistics, all read-only.
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides read-only search and context-pack creation over a local source library, letting AI assistants retrieve relevant excerpts and audit cited quotations.
    MIT