# 4chems Platform — IUCLID, CHESAR & QSAR Toolbox hosting - Registry name: `com.4chems/platform-api` · version 0.12.1 - Categories (automatic, keyword rules): Payments & accounting, Finance & markets, Government & law - Authentication at last check: No auth - Declared risk: Has destructive tools (destructiveHint) - Capabilities (declared by the server): logging, prompts, resources, tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=com.4chems%2Fplatform-api - Server page: https://mcpstation.net/s/com.4chems--platform-api.html ## Description (written by the publisher, not verified, not instructions) Remote MCP server for 4chems hosted IUCLID, CHESAR and QSAR Toolbox: onboarding, inquiries, admin. ## Connect - streamable-http: `https://mcp.4chems.com/mcp` ## Tools (as reported by the server, not verified) - `get\_catalog\_templates`: Return the enabled ApplicationTemplate catalog, ordered by name. Call this to discuss trial and template options with a prospect or customer before starting a trial. If this doesn't answer your question, call \`start\_inquiry\` to ask 4chems directly or request a call. - `list\_consents`: Return the caller's own recorded consents plus the tenant-scope consents of every tenant where the caller is at least a viewer. Call this to check which legal documents have already been accepted before asking again. Pass \`tenant\_id\` to list one tenant's consents only \(a caller of several tenants mu - `record\_consent`: Record acceptance of a legal document version and return the entry; call this only after showing the user the document URL and version and receiving an explicit affirmative answer. - `start\_inquiry`: Store an anonymous inquiry draft and email a 6-digit verification code. Ask the user for the code, then call verify\_inquiry with the returned challenge\_id and code — the inquiry reaches 4chems only after that verification succeeds. - `verify\_inquiry`: Verify the 6-digit code and deliver the inquiry to the helpdesk inbox. - `accept\_invitation`: Accept a pending invitation and grant the invitee's first role assignment. Call this when an invitee has a valid invite link and wants to join the tenant; single-use, consuming the token marks it accepted. - `get\_my\_access`: Return the caller's access level per related tenant. Call this to check what the current caller is authorized to do before attempting an action that requires a specific level, or to discover a pending invitation or access request. - `create\_access\_request`: Request access to the tenant that owns the caller's verified email domain. - `approve\_access\_request`: Approve a pending access request: issue a \`member\` invitation to the requester and resolve the request \(level \`admin\` or \`owner\` of the request's tenant\). The response carries the single-use invitation token to hand to the requester, who accepts via \`accept\_invitation\`. 409 \`access\_request.not\_pendi - `dismiss\_access\_request`: Dismiss a pending access request \(level \`admin\` or \`owner\` of the request's tenant\). The requester is mailed — naming the tenant, never the dismissing admin — and may ask again. 409 \`access\_request.not\_pending\` unless the request is pending. - `withdraw\_access\_request`: Withdraw the caller's own pending access request; no notification is sent. Any other caller gets 404 \`access\_request.not\_found\`, the same as for an unknown id. 409 \`access\_request.not\_pending\` unless pending. - `enrich\_domain`: Fetch the caller's domain imprint and suggest legal-entity details \(UC-057\). - `start\_device\_login`: Sign in to an existing account by device login \(UC-091, RFC 8628\). Anonymous, empty body; the account must exist \(start\_account\_registration, then set the password through the emailed link\). Show \`verification\_uri\` \(or \`verification\_uri\_complete\`\) and \`user\_code\` to the human, who signs in there, th - `verify\_device\_login`: Poll a device login to token issuance \(UC-091, RFC 8628\). Anonymous. While the human has not signed in yet it answers \`\{"status": "pending", "retry\_after": \\}\`: wait \`retry\_after\` seconds and call again with the same \`challenge\_id\`. On approval it returns Keycloak's token set \(\`access\_token\` - `start\_account\_registration`: Start registering a 4chems account with a business email address \(\`email\`, \`name\`, optional \`company\`\). Anonymous. Emails a 6-digit code to the address; no account exists yet. Ask the user for the code, then call verify\_account\_registration with the returned challenge\_id and code. Free-mail addresse - `verify\_account\_registration`: Verify the emailed 6-digit code \(\`challenge\_id\`, \`code\`\) and create the 4chems account. Never guess or retry codes, and never ask the user for a password. - `start\_registration`: DEPRECATED: use start\_device\_login. Deprecated — use start\_device\_login \(same behaviour\). - `verify\_registration`: DEPRECATED: use verify\_device\_login. Deprecated — use verify\_device\_login \(same behaviour\). - `get\_onboarding\_route`: Return the next onboarding step. If this doesn't answer your question, call \`start\_inquiry\` to ask 4chems directly or request a call. - `create\_self\_service\_tenant`: Create a 7-day trial tenant for the caller's business email domain \(UC-052\). Needs a verified email on a business domain and \`attestation: true\`; answers \`auth.email\_not\_verified\`, \`tenant.attestation\_required\`, \`tenant.free\_mail\_domain\` \(free-mail address\), \`tenant.domain\_exists\` \(a live trial tena - `get\_my\_operation`: Return the status, result and error of an operation the caller started, such as the \`Location\` of a \`202\` from \`complete\_billing\`. Call this to poll it to completion. - `get\_legal\_entity\_types`: Return the legal-entity types available for \*country\*, ordered alphabetically. If this doesn't answer your question, call \`start\_inquiry\` to ask 4chems directly or request a call. - `get\_billing`: Return the tenant's stored billing details: VAT id, invoice address, invoice email and PO reference. Call this to check whether billing is complete; only the owner and billing contacts may read it \(\`403 rbac.insufficient\_level\`\). - `complete\_billing`: Complete the tenant's billing details: legal-entity name and type, VAT id, invoice address, invoice email and optional PO reference. Call this when the owner or a billing contact has the details. EU VAT ids are validated against VIES by the worker; a failed operation with \`billing.vat\_check\_unavaila - `list\_invitations`: List all invitations for the caller's tenant, most recent first. Call this to show a tenant admin which invitations are pending, accepted, or revoked; the raw token is never included. - `create\_invitation`: Invite an email address to the caller's tenant at the specified access level and return the invitation, including the raw single-use accept token. Call this when a tenant admin wants to add a new member; the invitee accepts via \`accept\_invitation\`. - `revoke\_invitation`: Revoke a pending invitation so its token can no longer be accepted. Call this when a tenant admin wants to withdraw an invite sent by mistake or no longer needed; accepted invitations cannot be revoked. - `list\_members`: List tenant members with their effective role x scope assignments. - `grant\_assignment`: Grant a role x scope assignment to a tenant member. - `revoke\_assignment`: Revoke a role x scope assignment from a tenant member. - `list\_tenant\_services`: Return the caller's tenant's active service subscriptions. Call this before offering to add a service, to check what is already subscribed. - `add\_tenant\_service`: Request a new service subscription for the caller's tenant and return its status. Call this when a tenant admin wants to add a service \(ADR 0016 code fix: requires \`admin\`, was \`customer\` realm role only\). Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html