Install and connect Codex
Open/mcp/connect on your AskMyDocs installation. Sign in, prepare a connection
and download its plugin ZIP. Upload it in Codex under Plugins > New plugin.
The archive contains plugin.json, mcp.json, .codex-plugin/plugin.json,
.mcp.json and skills/ directly at the plugin root. It does not contain a
marketplace catalog or an outer plugin/ directory. A marketplace archive is
not a single-plugin upload.
Operators can instead generate a local marketplace directory (a separate
distribution format, not the ZIP upload):
.test endpoint is reachable from the local
Mac, not from ChatGPT cloud execution.
Connect Claude and other clients
Open/mcp/connect, select the application, and prepare a connection. The page
shows the unique URL and instructions for that client. Changing the application
selector only changes instructions; OAuth identifies and authorizes the actual
client. Prepare another connection for a different project. Separate connections
per application also let you revoke each application’s access independently.
Claude web and Desktop
In Claude, open Customize > Connectors > Add > Custom > Web. Enter a name and the connection’s MCP URL. Choose Sign in now and Register automatically under OAuth client. AskMyDocs supports dynamic client registration; it does not currently support Claude’s published-identity/CIMD option. No manual client ID, client secret, bearer token or request header is required. Finish browser sign-in and select the company/project in AskMyDocs. These custom connectors connect from Anthropic’s cloud, including when used in Claude Desktop. They require a deployed public HTTPS AskMyDocs origin; the development addresshttps://askmydocsdev.test is not reachable by Anthropic.
See Claude’s connector setup
and network requirements.
Claude Code
Run the command generated by/mcp/connect in your development project:
/mcp in Claude Code and complete OAuth sign-in. The generated server
name includes the connection UUID, so a second project has a different name as
well as a different URL. A local installation requires that the machine running
Claude Code can resolve the Herd domain and trust its TLS certificate.
See Claude Code’s MCP documentation.
Cursor and other MCP clients
Select Cursor to copy a ready-to-usemcpServers JSON entry, with a unique
server name and URL. Merge it into Cursor’s MCP configuration while preserving
other servers, then enable the server and finish OAuth sign-in. Cursor supports
Streamable HTTP and OAuth.
Other clients need Streamable HTTP, protected-resource OAuth discovery and
dynamic client registration. Use the connection URL, then complete browser
sign-in. Clients supporting only local stdio or fixed bearer-token authentication
cannot use this OAuth endpoint directly.
The same search, read and ingest tools are exposed in every client. A client’s
ability to send local files or attachments depends on its file-access features;
the ingest tool accepts file content, not a path on the user’s computer.
Server tests cover registration, PKCE, consent, token exchange and project reads
with HTTPS, IPv4, IPv6 and exact localhost callbacks, including changing local
ports and rejecting host/path/query substitutions. UI tests cover the client
instructions and generated configurations. These tests do not claim that a
real Claude or Cursor account has completed sign-in; that requires the deployed
origin and an end-to-end check in the chosen client.
Search and read
The connected server exposes these tools:
Search and document tools have no tenant or project argument. Every request
rechecks account activity, membership in the selected project, current client
policy, token audience, expiry and revocation. Reading a document by its numeric
ID cannot escape the selected project. Existing document access scopes apply.
The PHP surface is
ConnectedProjectWorkspace / McpDocumentImportService.
The REST adapters are POST /mcp/knowledge/{connection}/api/info, /search,
/document and /imports; they use the same OAuth authority and services.
Send documents from Codex
Ask Codex to import specific local files. It can send Markdown and plain text as text, or PDF/DOCX bytes as base64. One call accepts at most ten files, 5 MB per decoded file and 10 MB total. File signatures are checked. Arbitrary filesystem paths and download URLs are not accepted as file content.- Codex submits the files to
kb-ingest-documents-tool. - AskMyDocs stages them and returns the import ID, file manifest and
approval_url. The files have not been indexed yet. - Open that link. Review the destination, names, sizes and text previews, then approve indexing. The MCP token cannot approve the operation itself.
- Codex polls
kb-import-status-tool. Onlyready: truemeans every file was indexed successfully and can be used for retrieval.
mcp:ingest plus the existing admin/super-admin
ingestion role and unrestricted membership in the selected project. Read-only
connections use mcp:read. Uploads use a separate content-addressed source
namespace, preserving existing source files. Identical retries return the
original import, including concurrent submissions. Approval is valid for one
hour and is bound to the staged byte hashes; changed staged files are rejected.
The queue rechecks the initiating user’s current permissions before processing.
The import delegates to KbUploadStagingService and IngestDocumentJob, the
same conversion, chunking, PII handling, embedding and persistence pipeline used
by existing uploads. It does not implement a second document index.
Authentication and deployment
Protected-resource discovery is available at/.well-known/oauth-protected-resource/mcp/knowledge/{connection}. An
unauthenticated MCP request returns a WWW-Authenticate challenge pointing at
that exact resource metadata. The MCP authorization-server issuer is
APP_URL/oauth/mcp, discovered at
/.well-known/oauth-authorization-server/oauth/mcp.
The existing authorization server provides public-client dynamic registration,
authorization codes with mandatory S256 PKCE, issuer-bound callbacks, resource
audience validation and refresh-token rotation. Access tokens last at most one
hour (or the shorter Sanctum lifetime). Refresh families expire 90 days after
consent; replaying a consumed refresh token revokes its family. Browser approval
and connection management require a session and CSRF protection. The legacy
/mcp/kb tenant-token endpoint and the existing API OAuth clients keep their
separate authentication contracts.
Deploy the migration and frontend build:
laravel/mcp is a production dependency. Use the installation’s public HTTPS
APP_URL, keep its queue worker running, and use a shared lock-capable cache
store across workers. Dynamic registration and MCP traffic have independent
rate limits. Tokens are hashed at rest; tool audit records omit document bodies
and secrets. Revocation is available at /oauth/connections.
See OpenAI’s MCP authentication
and plugin packaging
guides for client installation and public distribution.