Skip to main content

MCP server that exposes an OpenText AppWorks Platform entity service to Claude (and other MCP-compatible clients) through a small set of generic, plain-English tools.

Project description

OpenText Process Automation MCP

A Model Context Protocol server that lets Claude (and any other MCP-compatible client) work with an OpenText AppWorks Platform tenant in plain English.

Point it at one entity service, give it a username and password, and ask things like:

"Show me my open legal cases." "What categories are configured under the Litigation practice area?" "Describe the LegalCase entity — what fields does it have?"

The server discovers the entire API surface (typically several hundred endpoints) at startup and exposes it through a small set of generic tools that take the entity name as an argument. No code generation, no per-endpoint maintenance.

Status

v0.1.0 — read-only release. Implementation complete, build artifacts in dist/, ready to publish to PyPI. See PUBLISHING.md for the upload steps and READ-ME-FIRST-TOMORROW.md for the end-to-end setup checklist.

See docs/research/findings.md for the validated design and what we learned from probing a live AppWorks 23.4 instance.

How it will work (v1.0)

  1. You add a snippet to your MCP client config (Claude Desktop, Claude Code, Cursor, etc.) that runs uvx opentext-pa-mcp with three env vars.
  2. uvx downloads the package from PyPI and runs it. No manual pip install, no clone.
  3. On startup the server logs into your AppWorks tenant via OTDS, fetches the entity service's OpenAPI spec, builds an entity catalog, and registers ~18 generic tools.
  4. You restart the MCP client. Done.

Final config snippet for Claude Desktop's %APPDATA%\Claude\claude_desktop_config.json (or the Mac/Linux equivalents):

{
  "mcpServers": {
    "opentext-pa": {
      "command": "uvx",
      "args": ["opentext-pa-mcp"],
      "env": {
        "PA_SERVICE_URL": "http://your-host:3381/home/<tenant>/app/entityservice/<EntityServiceName>",
        "PA_USERNAME": "<username>",
        "PA_PASSWORD": "<password>"
      }
    }
  }
}

Optional env vars:

Variable Default Purpose
PA_LOG_LEVEL INFO One of DEBUG, INFO, WARNING, ERROR, CRITICAL.
PA_REQUEST_TIMEOUT_S 30 Per-request HTTP timeout in seconds.
PA_VERIFY_TLS true Set to false to skip TLS certificate verification. Insecure — use only against dev/test servers with self-signed certs.
PA_CA_BUNDLE (unset) Path to a PEM file containing your corporate root CA. Use this when AppWorks is on https:// behind an internal CA. Preferred over disabling verification. Mutually exclusive with PA_VERIFY_TLS=false.

The PA_SERVICE_URL is the exact URL you see in your browser when looking at the Swagger UI of the entity service you want to expose. The server parses host, tenant, and service name out of it.

v1.0 tool surface (9 tools)

Group Tools
Discovery list_entities, describe_entity, list_named_lists
Read query_list, get_entity, list_children, get_child, list_relationship_targets
Escape hatch pa_api_call (GET-only passthrough)

Read-only by default. Write tools (create_entity, update_entity, delete_entity, invoke_action, child/relationship writes) arrive in v1.1 behind PA_ALLOW_WRITES=true.

Workspace structure

opentext-processautomation-mcp/
├── CLAUDE.md           Working rules (TDD, folder layout, code standards)
├── CONTRIBUTING.md     Branching, PRs, commit conventions
├── README.md           This file
├── pyproject.toml      Package manifest, dependencies, tool config
├── research/           Decisions log, evolution changelog
├── docs/
│   ├── research/       Validated discovery findings + reproducible artifacts
│   ├── technical/      Architecture docs (future)
│   └── product/        Feature specs (future)
├── src/opentext_pa_mcp/   The Python package
└── tests/
    ├── unit/           Fast, no-network (httpx mocked via respx)
    └── integration/    Against a live AppWorks tenant (gated by env vars)

What it is not

  • Not a UI. It exposes tools to an LLM; the LLM is the interface.
  • Not a generic OpenAPI-to-MCP bridge. It's specifically tuned for AppWorks's uniform entities / items / lists / childEntities / relationships / actions URL pattern, which lets us cover 700+ endpoints with a tiny tool count.
  • Not multi-tenant. One server instance = one entity service. Run multiple instances if you need multiple services.

Authoritative references

  • docs/research/findings.md — what's true about the live AppWorks API.
  • research/DECISIONS.md — architectural decisions and why.
  • CLAUDE.md — working rules.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

opentext_pa_mcp-0.1.2.tar.gz (21.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

opentext_pa_mcp-0.1.2-py3-none-any.whl (26.1 kB view details)

Uploaded Python 3

File details

Details for the file opentext_pa_mcp-0.1.2.tar.gz.

File metadata

  • Download URL: opentext_pa_mcp-0.1.2.tar.gz
  • Upload date:
  • Size: 21.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for opentext_pa_mcp-0.1.2.tar.gz
Algorithm Hash digest
SHA256 5528347e561a46e66216375a060fd5c55b6de6336f4dcd31444a19b583957f97
MD5 3f8cde65a48f3af207416080caa5bcd7
BLAKE2b-256 7e7b5c5ce87d6ad1e9cbadbdd43b06c343cefa1b87cacef0ee1a3fe4d205504d

See more details on using hashes here.

File details

Details for the file opentext_pa_mcp-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: opentext_pa_mcp-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 26.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for opentext_pa_mcp-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a12fce4476cb62f57d949f99ddbaafb4bd4e87df8c4048c4b766a59d0aff524d
MD5 b5a1f65c0c575764201440a2fd1616fe
BLAKE2b-256 f0ff2a18c26ad1e3472a18db254ff6f83cb379c3058f2ac09d662a0ff2bc9dcd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page