smctx

smctx: SM 9.81 docs for AI coding assistants

A private, invite-only, non-commercial search service over the OpenText Service Manager 9.81 documentation. It lets an AI coding assistant look things up instead of guessing.

Unofficial project, not affiliated with OpenText. It is not endorsed or supported by OpenText, and it indexes the publicly available OpenText Service Manager 9.81 documentation.

What it gives your assistant

It is an MCP server with three read-only tools:

Getting access

Access is by invitation only and there is no sign-up. To ask for an invite, write to hello@smctx.dev. You will get a one-time link that shows your personal token once, with setup for your client already filled in.

Connect your client

Your server address is https://mcp.smctx.dev/mcp. The snippets below use <your-token> in place of your token; the invite page shows them with your real one. Clients marked untested have not been confirmed with a live run yet; the commands come from each vendor's documentation.

Claude Code · Codex (CLI and IDE extension) · GitHub Copilot in VS Code · GitHub Copilot CLI · Cursor · Other clients

Claude Code untested

Set up

Add the server (user scope, all projects)

claude mcp add --transport http --scope user sm-docs https://mcp.smctx.dev/mcp --header "Authorization: Bearer <your-token>"

Where your token is stored

Claude Code writes the token, in plain text, into ~/.claude.json (user scope). Keep that file private and do not commit it.

Keep it out of config files

Put the token in an environment variable and reference it from a .mcp.json file. Use a custom name such as SMCTX_TOKEN: variables like ANTHROPIC_API_KEY are read as empty in remote server headers.

Shell profile

export SMCTX_TOKEN='<your-token>'

.mcp.json (the file then holds no secret)

{
  "mcpServers": {
    "sm-docs": {
      "type": "http",
      "url": "https://mcp.smctx.dev/mcp",
      "headers": {
        "Authorization": "Bearer ${SMCTX_TOKEN}"
      }
    }
  }
}

macOS keychain alternative: store the token once, then read it with headersHelper

Then register the server with this headersHelper command in place of a static header: printf '{"Authorization":"Bearer %s"}' "$(security find-generic-password -s smctx -w)". It must print a JSON object and has a 10 second timeout.

security add-generic-password -s smctx -a "$USER" -w '<your-token>'

Make the assistant use it

Add this to ~/.claude/CLAUDE.md (all projects) or your project CLAUDE.md:

For any question about OpenText Service Manager (SM 9.x) — configuration, RAD, web tier, ITSM modules — search the `sm-docs` MCP server (`search_docs`, then `read_doc`) before answering from memory.

Check it works

Run `claude mcp list`. sm-docs should show as connected.

Codex (CLI and IDE extension) untested

Set up

Put the token in your shell profile (~/.zshrc or ~/.bashrc), then restart the terminal

export SMCTX_TOKEN='<your-token>'

Add the server to ~/.codex/config.toml

[mcp_servers.sm-docs]
url = "https://mcp.smctx.dev/mcp"
bearer_token_env_var = "SMCTX_TOKEN"

Or add it from the command line instead of editing config.toml

This flag comes from an upstream pull request and is not shown in the current docs. Run `codex mcp add --help` to confirm it.

codex mcp add sm-docs --url https://mcp.smctx.dev/mcp --bearer-token-env-var SMCTX_TOKEN

If your editor or app cannot see shell variables (the token is then stored in plain text)

[mcp_servers.sm-docs]
url = "https://mcp.smctx.dev/mcp"
http_headers = { "Authorization" = "Bearer <your-token>" }

Where your token is stored

With the environment variable form, the token sits in your shell profile in plain text and config.toml holds only the variable name. The CLI, the IDE extension and the desktop app share ~/.codex/config.toml.

Keep it out of config files

The environment variable form above already keeps the token out of config.toml. There is no native keychain support.

Make the assistant use it

Add this to AGENTS.md in your repo, or ~/.codex/AGENTS.md:

For any question about OpenText Service Manager (SM 9.x) — configuration, RAD, web tier, ITSM modules — search the `sm-docs` MCP server (`search_docs`, then `read_doc`) before answering from memory.

Check it works

Ask Codex which sm-docs tools it has. It should list search_docs, read_doc and list_docs.

GitHub Copilot in VS Code untested

Set up

Add to your user mcp.json (Command Palette: "MCP: Open User Configuration"). VS Code asks for the token and keeps it in its secret storage

Paste your token when VS Code prompts for it.

{
  "inputs": [
    {
      "type": "promptString",
      "id": "smctx-token",
      "description": "smctx.dev personal token",
      "password": true
    }
  ],
  "servers": {
    "sm-docs": {
      "type": "http",
      "url": "https://mcp.smctx.dev/mcp",
      "headers": {
        "Authorization": "Bearer ${input:smctx-token}"
      }
    }
  }
}

Or add it from the command line (writes the token into your user profile in plain text)

code --add-mcp '{"name":"sm-docs","type":"http","url":"https://mcp.smctx.dev/mcp","headers":{"Authorization":"Bearer <your-token>"}}'

Where your token is stored

With the prompt form (inputs), VS Code stores the token in its secret storage and mcp.json holds no secret. The command line and install link forms put the token in your user profile in plain text.

Keep it out of config files

The prompt form above is the no-plaintext option. Alternatively reference an environment variable, which must be set before VS Code starts.

mcp.json with an environment variable

{
  "servers": {
    "sm-docs": {
      "type": "http",
      "url": "https://mcp.smctx.dev/mcp",
      "headers": {
        "Authorization": "Bearer ${env:SMCTX_TOKEN}"
      }
    }
  }
}

Make the assistant use it

Add this to .github/copilot-instructions.md or AGENTS.md in your workspace:

For any question about OpenText Service Manager (SM 9.x) — configuration, RAD, web tier, ITSM modules — search the `sm-docs` MCP server (`search_docs`, then `read_doc`) before answering from memory.

Check it works

Open Copilot Chat in agent mode and the tools picker. sm-docs should list search_docs, read_doc and list_docs.

GitHub Copilot CLI untested

Set up

Add the server

Run `copilot mcp add --help` to confirm the flags in your version.

copilot mcp add --transport http --header "Authorization: Bearer <your-token>" sm-docs https://mcp.smctx.dev/mcp

Where your token is stored

The token is stored in plain text in ~/.copilot/mcp-config.json. Keep that file private.

Keep it out of config files

Reference an environment variable from ~/.copilot/mcp-config.json and export SMCTX_TOKEN in your shell profile.

Shell profile

export SMCTX_TOKEN='<your-token>'

~/.copilot/mcp-config.json

{
  "mcpServers": {
    "sm-docs": {
      "type": "http",
      "url": "https://mcp.smctx.dev/mcp",
      "headers": {
        "Authorization": "Bearer ${SMCTX_TOKEN}"
      },
      "tools": [
        "*"
      ]
    }
  }
}

Make the assistant use it

Add this to ~/.copilot/copilot-instructions.md (all projects) or AGENTS.md in your repo:

For any question about OpenText Service Manager (SM 9.x) — configuration, RAD, web tier, ITSM modules — search the `sm-docs` MCP server (`search_docs`, then `read_doc`) before answering from memory.

Check it works

Run `copilot mcp list`. sm-docs should be listed.

Cursor untested

Set up

Add to the global ~/.cursor/mcp.json (not a project .cursor/mcp.json, which you might commit)

{
  "mcpServers": {
    "sm-docs": {
      "url": "https://mcp.smctx.dev/mcp",
      "headers": {
        "Authorization": "Bearer <your-token>"
      }
    }
  }
}

Where your token is stored

The token is stored in plain text in ~/.cursor/mcp.json. This literal form in the global file is the most reliable one in Cursor. Never put it in a project file.

Keep it out of config files

Cursor can read an environment variable, but it resolves it at startup from its own environment, so a Cursor launched from the dock may not see your shell profile. Restart Cursor after setting SMCTX_TOKEN.

~/.cursor/mcp.json with an environment variable

{
  "mcpServers": {
    "sm-docs": {
      "url": "https://mcp.smctx.dev/mcp",
      "headers": {
        "Authorization": "Bearer ${env:SMCTX_TOKEN}"
      }
    }
  }
}

Make the assistant use it

Add this to .cursor/rules/sm-docs.mdc (a plain .md file there is ignored):

---
alwaysApply: true
---
For any question about OpenText Service Manager (SM 9.x) — configuration, RAD, web tier, ITSM modules — search the `sm-docs` MCP server (`search_docs`, then `read_doc`) before answering from memory.

Check it works

Ask Cursor which sm-docs tools it has. It should list search_docs, read_doc and list_docs.

Other clients untested

Any client that supports remote MCP servers over Streamable HTTP with a static header should work. These are the generic facts.

URLhttps://mcp.smctx.dev/mcp
TransportStreamable HTTP
HeaderAuthorization: Bearer <your-token>
AuthenticationA personal token as a static header. OAuth is not offered, so a client must accept a configured header.

Not supported yet

Privacy

Every tool call is logged against your personal token: the token owner, the tool, the query text or page slug, the number of results, the response size, the latency, the status and the time. The usage log stores no IP address and no user agent; rate-limit events record only a truncated network prefix (/24 for IPv4, /48 for IPv6) in the server journal. The usage log is used only to improve search quality and is not shared with anyone. It is not purged automatically; on request your rows are deleted. Do not put confidential or customer data in queries. Traffic is carried by Cloudflare, which processes it in transit.

To have your data deleted, write to hello@smctx.dev.

Availability

Best effort: one small server, no SLA. It may be unavailable or change without notice.