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:
search_docs: Hybrid vector and keyword search across the documentation. Returns ranked excerpts with page slugs.read_doc: Returns the full text of one documentation page by slug, in pages when it is long.list_docs: Browses the documentation tree so an assistant can see which topics exist.
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.
| URL | https://mcp.smctx.dev/mcp |
|---|---|
| Transport | Streamable HTTP |
| Header | Authorization: Bearer <your-token> |
| Authentication | A personal token as a static header. OAuth is not offered, so a client must accept a configured header. |
Not supported yet
- claude.ai and Claude Desktop: Their custom connectors need OAuth sign-in, which this server does not offer yet. It is planned.
- ChatGPT: Its connectors also need OAuth.
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.