{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_8gc66rb8usrq","handle":"4chems-platform-iuclid-chesar-qsar-toolbox-hosti","url":"https://wellknown.network/agents/4chems-platform-iuclid-chesar-qsar-toolbox-hosti","links":{"self":"https://wellknown.network/agents/4chems-platform-iuclid-chesar-qsar-toolbox-hosti/record.json","html":"https://wellknown.network/agents/4chems-platform-iuclid-chesar-qsar-toolbox-hosti","markdown":"https://wellknown.network/agents/4chems-platform-iuclid-chesar-qsar-toolbox-hosti/record.md","api":"https://wellknown.network/api/v1/agents/4chems-platform-iuclid-chesar-qsar-toolbox-hosti","status":"https://wellknown.network/api/v1/agents/4chems-platform-iuclid-chesar-qsar-toolbox-hosti/status","claim":"https://wellknown.network/agents/4chems-platform-iuclid-chesar-qsar-toolbox-hosti/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/4chems-platform-iuclid-chesar-qsar-toolbox-hosti/claim.json","badge":"https://wellknown.network/agents/4chems-platform-iuclid-chesar-qsar-toolbox-hosti/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/4chems-platform-iuclid-chesar-qsar-toolbox-hosti/history","tools":"https://wellknown.network/api/v1/agents/4chems-platform-iuclid-chesar-qsar-toolbox-hosti/tools"},"ard":{"identifier":"urn:air:mcp.4chems.com:server:4chems-platform-iuclid-chesar-qsar-toolbox-hosti","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"4chems Platform — IUCLID, CHESAR & QSAR Toolbox hosting","summary":"Remote MCP server for 4chems hosted IUCLID, CHESAR and QSAR Toolbox: onboarding, inquiries, admin.","description":"Remote MCP server for 4chems hosted IUCLID, CHESAR and QSAR Toolbox: onboarding, inquiries, admin.","publisher":{"name":"com.4chems","url":null},"homepage":"https://www.4chems.com/mcp/","repository":"https://github.com/4chems/mcp","version":"0.12.1","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://mcp.4chems.com/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-09T19:58:29.643947Z","publishedAt":"2026-10-09T19:58:29.643947Z","registryName":"com.4chems/platform-api"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"commerce.ecommerce","name":"E-commerce Operations","confidence":0.992,"provenance":"derived"},{"slug":"productivity.email","name":"Email","confidence":0.962,"provenance":"derived"},{"slug":"communication.notifications","name":"Notifications","confidence":0.583,"provenance":"derived"},{"slug":"dev.docs-lookup","name":"Documentation Lookup","confidence":0.54,"provenance":"derived"},{"slug":"communication.customer-support","name":"Customer Support","confidence":0.525,"provenance":"derived"},{"slug":"ai.prompting","name":"Prompt Management","confidence":0.525,"provenance":"derived"},{"slug":"documents.invoice-processing","name":"Invoice Processing","confidence":0.51,"provenance":"derived"}],"categories":["ai","commerce","communication","dev","documents","productivity"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 7h ago.","lastOkAt":"2026-10-23T02:24:24.072Z","lastProbedAt":"2026-10-23T02:24:24.072Z","statusComputedAt":"2026-10-23T02:26:49.010Z","reliability30d":{"probes":41,"successRate":1,"p50Ms":39,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":41,"ok":41,"authBoundaryOk":0,"serviceOk":41,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-23T02:24:24.072Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":37,"error":null,"detail":{"tools":[{"name":"get_catalog_templates","description":"Return the enabled ApplicationTemplate catalog, ordered by name. Call this to\ndiscuss trial and template options with a prospect or customer before starting a\nt"},{"name":"list_consents","description":"Return the caller's own recorded consents plus the tenant-scope consents of\nevery tenant where the caller is at least a viewer. Call this to check which legal\nd"},{"name":"record_consent","description":"Record acceptance of a legal document version and return the entry; call this\nonly after showing the user the document URL and version and receiving an\nexplicit"},{"name":"start_inquiry","description":"Store an anonymous inquiry draft and email a 6-digit verification code.\nAsk the user for the code, then call verify_inquiry with the returned\nchallenge_id and c"},{"name":"verify_inquiry","description":"Verify the 6-digit code and deliver the inquiry to the helpdesk inbox."},{"name":"accept_invitation","description":"Accept a pending invitation and grant the invitee's first role assignment.\nCall this when an invitee has a valid invite link and wants to join the\ntenant; singl"},{"name":"get_my_access","description":"Return the caller's access level per related tenant. Call this to check\nwhat the current caller is authorized to do before attempting an action\nthat requires a "},{"name":"create_access_request","description":"Request access to the tenant that owns the caller's verified email domain."},{"name":"approve_access_request","description":"Approve a pending access request: issue a `member` invitation to the\nrequester and resolve the request (level `admin` or `owner` of the\nrequest's tenant). The r"},{"name":"dismiss_access_request","description":"Dismiss a pending access request (level `admin` or `owner` of the\nrequest's tenant). The requester is mailed — naming the tenant, never the\ndismissing admin — a"},{"name":"withdraw_access_request","description":"Withdraw the caller's own pending access request; no notification is\nsent. Any other caller gets 404 `access_request.not_found`, the same as\nfor an unknown id. "},{"name":"enrich_domain","description":"Fetch the caller's domain imprint and suggest legal-entity details (UC-057)."},{"name":"start_device_login","description":"Sign in to an existing account by device login (UC-091, RFC 8628). Anonymous,\nempty body; the account must exist (start_account_registration, then set the\npassw"},{"name":"verify_device_login","description":"Poll a device login to token issuance (UC-091, RFC 8628). Anonymous. While\nthe human has not signed in yet it answers `{\"status\": \"pending\",\n\"retry_after\": <sec"},{"name":"start_account_registration","description":"Start registering a 4chems account with a business email address (`email`,\n`name`, optional `company`). Anonymous. Emails a 6-digit code to the address;\nno acco"},{"name":"verify_account_registration","description":"Verify the emailed 6-digit code (`challenge_id`, `code`) and create the\n4chems account. Never guess or retry codes, and never ask the user for a\npassword."},{"name":"start_registration","description":"DEPRECATED: use start_device_login. Deprecated — use start_device_login (same behaviour)."},{"name":"verify_registration","description":"DEPRECATED: use verify_device_login. Deprecated — use verify_device_login (same behaviour)."},{"name":"get_onboarding_route","description":"Return the next onboarding step. If this doesn't answer your question, call\n`start_inquiry` to ask 4chems directly or request a call."},{"name":"create_self_service_tenant","description":"Create a 7-day trial tenant for the caller's business email domain (UC-052).\nNeeds a verified email on a business domain and `attestation: true`; answers\n`auth."},{"name":"get_my_operation","description":"Return the status, result and error of an operation the caller started, such as\nthe `Location` of a `202` from `complete_billing`. Call this to poll it to compl"},{"name":"get_legal_entity_types","description":"Return the legal-entity types available for *country*, ordered alphabetically.\nIf this doesn't answer your question, call `start_inquiry` to ask 4chems directly"},{"name":"get_billing","description":"Return the tenant's stored billing details: VAT id, invoice address, invoice\nemail and PO reference. Call this to check whether billing is complete; only\nthe ow"},{"name":"complete_billing","description":"Complete the tenant's billing details: legal-entity name and type, VAT id,\ninvoice address, invoice email and optional PO reference. Call this when the\nowner or"},{"name":"list_invitations","description":"List all invitations for the caller's tenant, most recent first. Call this to\nshow a tenant admin which invitations are pending, accepted, or revoked; the\nraw t"},{"name":"create_invitation","description":"Invite an email address to the caller's tenant at the specified access\nlevel and return the invitation, including the raw single-use accept\ntoken. Call this whe"},{"name":"revoke_invitation","description":"Revoke a pending invitation so its token can no longer be accepted. Call this\nwhen a tenant admin wants to withdraw an invite sent by mistake or no longer\nneede"},{"name":"list_members","description":"List tenant members with their effective role x scope assignments."},{"name":"grant_assignment","description":"Grant a role x scope assignment to a tenant member."},{"name":"revoke_assignment","description":"Revoke a role x scope assignment from a tenant member."},{"name":"list_tenant_services","description":"Return the caller's tenant's active service subscriptions. Call this before\noffering to add a service, to check what is already subscribed."},{"name":"add_tenant_service","description":"Request a new service subscription for the caller's tenant and return its\nstatus. Call this when a tenant admin wants to add a service (ADR 0016\ncode fix: requi"}],"toolCount":32,"toolsHash":"6001d4e2d9665d4e9d3ef79bbf2a73b23776f7b844fee22fa99cee13be579f8e","serverName":"platform-api-customer","capabilities":["logging","prompts","resources","tools"],"serverVersion":"0.12.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-22T20:28:35.872Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":34,"error":null,"detail":{"tools":[{"name":"get_catalog_templates","description":"Return the enabled ApplicationTemplate catalog, ordered by name. Call this to\ndiscuss trial and template options with a prospect or customer before starting a\nt"},{"name":"list_consents","description":"Return the caller's own recorded consents plus the tenant-scope consents of\nevery tenant where the caller is at least a viewer. Call this to check which legal\nd"},{"name":"record_consent","description":"Record acceptance of a legal document version and return the entry; call this\nonly after showing the user the document URL and version and receiving an\nexplicit"},{"name":"start_inquiry","description":"Store an anonymous inquiry draft and email a 6-digit verification code.\nAsk the user for the code, then call verify_inquiry with the returned\nchallenge_id and c"},{"name":"verify_inquiry","description":"Verify the 6-digit code and deliver the inquiry to the helpdesk inbox."},{"name":"accept_invitation","description":"Accept a pending invitation and grant the invitee's first role assignment.\nCall this when an invitee has a valid invite link and wants to join the\ntenant; singl"},{"name":"get_my_access","description":"Return the caller's access level per related tenant. Call this to check\nwhat the current caller is authorized to do before attempting an action\nthat requires a "},{"name":"create_access_request","description":"Request access to the tenant that owns the caller's verified email domain."},{"name":"approve_access_request","description":"Approve a pending access request: issue a `member` invitation to the\nrequester and resolve the request (level `admin` or `owner` of the\nrequest's tenant). The r"},{"name":"dismiss_access_request","description":"Dismiss a pending access request (level `admin` or `owner` of the\nrequest's tenant). The requester is mailed — naming the tenant, never the\ndismissing admin — a"},{"name":"withdraw_access_request","description":"Withdraw the caller's own pending access request; no notification is\nsent. Any other caller gets 404 `access_request.not_found`, the same as\nfor an unknown id. "},{"name":"enrich_domain","description":"Fetch the caller's domain imprint and suggest legal-entity details (UC-057)."},{"name":"start_device_login","description":"Sign in to an existing account by device login (UC-091, RFC 8628). Anonymous,\nempty body; the account must exist (start_account_registration, then set the\npassw"},{"name":"verify_device_login","description":"Poll a device login to token issuance (UC-091, RFC 8628). Anonymous. While\nthe human has not signed in yet it answers `{\"status\": \"pending\",\n\"retry_after\": <sec"},{"name":"start_account_registration","description":"Start registering a 4chems account with a business email address (`email`,\n`name`, optional `company`). Anonymous. Emails a 6-digit code to the address;\nno acco"},{"name":"verify_account_registration","description":"Verify the emailed 6-digit code (`challenge_id`, `code`) and create the\n4chems account. Never guess or retry codes, and never ask the user for a\npassword."},{"name":"start_registration","description":"DEPRECATED: use start_device_login. Deprecated — use start_device_login (same behaviour)."},{"name":"verify_registration","description":"DEPRECATED: use verify_device_login. Deprecated — use verify_device_login (same behaviour)."},{"name":"get_onboarding_route","description":"Return the next onboarding step. If this doesn't answer your question, call\n`start_inquiry` to ask 4chems directly or request a call."},{"name":"create_self_service_tenant","description":"Create a 7-day trial tenant for the caller's business email domain (UC-052).\nNeeds a verified email on a business domain and `attestation: true`; answers\n`auth."},{"name":"get_my_operation","description":"Return the status, result and error of an operation the caller started, such as\nthe `Location` of a `202` from `complete_billing`. Call this to poll it to compl"},{"name":"get_legal_entity_types","description":"Return the legal-entity types available for *country*, ordered alphabetically.\nIf this doesn't answer your question, call `start_inquiry` to ask 4chems directly"},{"name":"get_billing","description":"Return the tenant's stored billing details: VAT id, invoice address, invoice\nemail and PO reference. Call this to check whether billing is complete; only\nthe ow"},{"name":"complete_billing","description":"Complete the tenant's billing details: legal-entity name and type, VAT id,\ninvoice address, invoice email and optional PO reference. Call this when the\nowner or"},{"name":"list_invitations","description":"List all invitations for the caller's tenant, most recent first. Call this to\nshow a tenant admin which invitations are pending, accepted, or revoked; the\nraw t"},{"name":"create_invitation","description":"Invite an email address to the caller's tenant at the specified access\nlevel and return the invitation, including the raw single-use accept\ntoken. Call this whe"},{"name":"revoke_invitation","description":"Revoke a pending invitation so its token can no longer be accepted. Call this\nwhen a tenant admin wants to withdraw an invite sent by mistake or no longer\nneede"},{"name":"list_members","description":"List tenant members with their effective role x scope assignments."},{"name":"grant_assignment","description":"Grant a role x scope assignment to a tenant member."},{"name":"revoke_assignment","description":"Revoke a role x scope assignment from a tenant member."},{"name":"list_tenant_services","description":"Return the caller's tenant's active service subscriptions. Call this before\noffering to add a service, to check what is already subscribed."},{"name":"add_tenant_service","description":"Request a new service subscription for the caller's tenant and return its\nstatus. Call this when a tenant admin wants to add a service (ADR 0016\ncode fix: requi"}],"toolCount":32,"toolsHash":"6001d4e2d9665d4e9d3ef79bbf2a73b23776f7b844fee22fa99cee13be579f8e","serverName":"platform-api-customer","capabilities":["logging","prompts","resources","tools"],"serverVersion":"0.12.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-22T14:27:49.852Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":66,"error":null,"detail":{"tools":[{"name":"get_catalog_templates","description":"Return the enabled ApplicationTemplate catalog, ordered by name. Call this to\ndiscuss trial and template options with a prospect or customer before starting a\nt"},{"name":"list_consents","description":"Return the caller's own recorded consents plus the tenant-scope consents of\nevery tenant where the caller is at least a viewer. Call this to check which legal\nd"},{"name":"record_consent","description":"Record acceptance of a legal document version and return the entry; call this\nonly after showing the user the document URL and version and receiving an\nexplicit"},{"name":"start_inquiry","description":"Store an anonymous inquiry draft and email a 6-digit verification code.\nAsk the user for the code, then call verify_inquiry with the returned\nchallenge_id and c"},{"name":"verify_inquiry","description":"Verify the 6-digit code and deliver the inquiry to the helpdesk inbox."},{"name":"accept_invitation","description":"Accept a pending invitation and grant the invitee's first role assignment.\nCall this when an invitee has a valid invite link and wants to join the\ntenant; singl"},{"name":"get_my_access","description":"Return the caller's access level per related tenant. Call this to check\nwhat the current caller is authorized to do before attempting an action\nthat requires a "},{"name":"create_access_request","description":"Request access to the tenant that owns the caller's verified email domain."},{"name":"approve_access_request","description":"Approve a pending access request: issue a `member` invitation to the\nrequester and resolve the request (level `admin` or `owner` of the\nrequest's tenant). The r"},{"name":"dismiss_access_request","description":"Dismiss a pending access request (level `admin` or `owner` of the\nrequest's tenant). The requester is mailed — naming the tenant, never the\ndismissing admin — a"},{"name":"withdraw_access_request","description":"Withdraw the caller's own pending access request; no notification is\nsent. Any other caller gets 404 `access_request.not_found`, the same as\nfor an unknown id. "},{"name":"enrich_domain","description":"Fetch the caller's domain imprint and suggest legal-entity details (UC-057)."},{"name":"start_device_login","description":"Sign in to an existing account by device login (UC-091, RFC 8628). Anonymous,\nempty body; the account must exist (start_account_registration, then set the\npassw"},{"name":"verify_device_login","description":"Poll a device login to token issuance (UC-091, RFC 8628). Anonymous. While\nthe human has not signed in yet it answers `{\"status\": \"pending\",\n\"retry_after\": <sec"},{"name":"start_account_registration","description":"Start registering a 4chems account with a business email address (`email`,\n`name`, optional `company`). Anonymous. Emails a 6-digit code to the address;\nno acco"},{"name":"verify_account_registration","description":"Verify the emailed 6-digit code (`challenge_id`, `code`) and create the\n4chems account. Never guess or retry codes, and never ask the user for a\npassword."},{"name":"start_registration","description":"DEPRECATED: use start_device_login. Deprecated — use start_device_login (same behaviour)."},{"name":"verify_registration","description":"DEPRECATED: use verify_device_login. Deprecated — use verify_device_login (same behaviour)."},{"name":"get_onboarding_route","description":"Return the next onboarding step. If this doesn't answer your question, call\n`start_inquiry` to ask 4chems directly or request a call."},{"name":"create_self_service_tenant","description":"Create a 7-day trial tenant for the caller's business email domain (UC-052).\nNeeds a verified email on a business domain and `attestation: true`; answers\n`auth."},{"name":"get_my_operation","description":"Return the status, result and error of an operation the caller started, such as\nthe `Location` of a `202` from `complete_billing`. Call this to poll it to compl"},{"name":"get_legal_entity_types","description":"Return the legal-entity types available for *country*, ordered alphabetically.\nIf this doesn't answer your question, call `start_inquiry` to ask 4chems directly"},{"name":"get_billing","description":"Return the tenant's stored billing details: VAT id, invoice address, invoice\nemail and PO reference. Call this to check whether billing is complete; only\nthe ow"},{"name":"complete_billing","description":"Complete the tenant's billing details: legal-entity name and type, VAT id,\ninvoice address, invoice email and optional PO reference. Call this when the\nowner or"},{"name":"list_invitations","description":"List all invitations for the caller's tenant, most recent first. Call this to\nshow a tenant admin which invitations are pending, accepted, or revoked; the\nraw t"},{"name":"create_invitation","description":"Invite an email address to the caller's tenant at the specified access\nlevel and return the invitation, including the raw single-use accept\ntoken. Call this whe"},{"name":"revoke_invitation","description":"Revoke a pending invitation so its token can no longer be accepted. Call this\nwhen a tenant admin wants to withdraw an invite sent by mistake or no longer\nneede"},{"name":"list_members","description":"List tenant members with their effective role x scope assignments."},{"name":"grant_assignment","description":"Grant a role x scope assignment to a tenant member."},{"name":"revoke_assignment","description":"Revoke a role x scope assignment from a tenant member."},{"name":"list_tenant_services","description":"Return the caller's tenant's active service subscriptions. Call this before\noffering to add a service, to check what is already subscribed."},{"name":"add_tenant_service","description":"Request a new service subscription for the caller's tenant and return its\nstatus. Call this when a tenant admin wants to add a service (ADR 0016\ncode fix: requi"}],"toolCount":32,"toolsHash":"6001d4e2d9665d4e9d3ef79bbf2a73b23776f7b844fee22fa99cee13be579f8e","serverName":"platform-api-customer","capabilities":["logging","prompts","resources","tools"],"serverVersion":"0.12.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-22T07:29:22.657Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":35,"error":null,"detail":{"tools":[{"name":"get_catalog_templates","description":"Return the enabled ApplicationTemplate catalog, ordered by name. Call this to\ndiscuss trial and template options with a prospect or customer before starting a\nt"},{"name":"list_consents","description":"Return the caller's own recorded consents plus the tenant-scope consents of\nevery tenant where the caller is at least a viewer. Call this to check which legal\nd"},{"name":"record_consent","description":"Record acceptance of a legal document version and return the entry; call this\nonly after showing the user the document URL and version and receiving an\nexplicit"},{"name":"start_inquiry","description":"Store an anonymous inquiry draft and email a 6-digit verification code.\nAsk the user for the code, then call verify_inquiry with the returned\nchallenge_id and c"},{"name":"verify_inquiry","description":"Verify the 6-digit code and deliver the inquiry to the helpdesk inbox."},{"name":"accept_invitation","description":"Accept a pending invitation and grant the invitee's first role assignment.\nCall this when an invitee has a valid invite link and wants to join the\ntenant; singl"},{"name":"get_my_access","description":"Return the caller's access level per related tenant. Call this to check\nwhat the current caller is authorized to do before attempting an action\nthat requires a "},{"name":"create_access_request","description":"Request access to the tenant that owns the caller's verified email domain."},{"name":"approve_access_request","description":"Approve a pending access request: issue a `member` invitation to the\nrequester and resolve the request (level `admin` or `owner` of the\nrequest's tenant). The r"},{"name":"dismiss_access_request","description":"Dismiss a pending access request (level `admin` or `owner` of the\nrequest's tenant). The requester is mailed — naming the tenant, never the\ndismissing admin — a"},{"name":"withdraw_access_request","description":"Withdraw the caller's own pending access request; no notification is\nsent. Any other caller gets 404 `access_request.not_found`, the same as\nfor an unknown id. "},{"name":"enrich_domain","description":"Fetch the caller's domain imprint and suggest legal-entity details (UC-057)."},{"name":"start_device_login","description":"Sign in to an existing account by device login (UC-091, RFC 8628). Anonymous,\nempty body; the account must exist (start_account_registration, then set the\npassw"},{"name":"verify_device_login","description":"Poll a device login to token issuance (UC-091, RFC 8628). Anonymous. While\nthe human has not signed in yet it answers `{\"status\": \"pending\",\n\"retry_after\": <sec"},{"name":"start_account_registration","description":"Start registering a 4chems account with a business email address (`email`,\n`name`, optional `company`). Anonymous. Emails a 6-digit code to the address;\nno acco"},{"name":"verify_account_registration","description":"Verify the emailed 6-digit code (`challenge_id`, `code`) and create the\n4chems account. Never guess or retry codes, and never ask the user for a\npassword."},{"name":"start_registration","description":"DEPRECATED: use start_device_login. Deprecated — use start_device_login (same behaviour)."},{"name":"verify_registration","description":"DEPRECATED: use verify_device_login. Deprecated — use verify_device_login (same behaviour)."},{"name":"get_onboarding_route","description":"Return the next onboarding step. If this doesn't answer your question, call\n`start_inquiry` to ask 4chems directly or request a call."},{"name":"create_self_service_tenant","description":"Create a 7-day trial tenant for the caller's business email domain (UC-052).\nNeeds a verified email on a business domain and `attestation: true`; answers\n`auth."},{"name":"get_my_operation","description":"Return the status, result and error of an operation the caller started, such as\nthe `Location` of a `202` from `complete_billing`. Call this to poll it to compl"},{"name":"get_legal_entity_types","description":"Return the legal-entity types available for *country*, ordered alphabetically.\nIf this doesn't answer your question, call `start_inquiry` to ask 4chems directly"},{"name":"get_billing","description":"Return the tenant's stored billing details: VAT id, invoice address, invoice\nemail and PO reference. Call this to check whether billing is complete; only\nthe ow"},{"name":"complete_billing","description":"Complete the tenant's billing details: legal-entity name and type, VAT id,\ninvoice address, invoice email and optional PO reference. Call this when the\nowner or"},{"name":"list_invitations","description":"List all invitations for the caller's tenant, most recent first. Call this to\nshow a tenant admin which invitations are pending, accepted, or revoked; the\nraw t"},{"name":"create_invitation","description":"Invite an email address to the caller's tenant at the specified access\nlevel and return the invitation, including the raw single-use accept\ntoken. Call this whe"},{"name":"revoke_invitation","description":"Revoke a pending invitation so its token can no longer be accepted. Call this\nwhen a tenant admin wants to withdraw an invite sent by mistake or no longer\nneede"},{"name":"list_members","description":"List tenant members with their effective role x scope assignments."},{"name":"grant_assignment","description":"Grant a role x scope assignment to a tenant member."},{"name":"revoke_assignment","description":"Revoke a role x scope assignment from a tenant member."},{"name":"list_tenant_services","description":"Return the caller's tenant's active service subscriptions. Call this before\noffering to add a service, to check what is already subscribed."},{"name":"add_tenant_service","description":"Request a new service subscription for the caller's tenant and return its\nstatus. Call this when a tenant admin wants to add a service (ADR 0016\ncode fix: requi"}],"toolCount":32,"toolsHash":"6001d4e2d9665d4e9d3ef79bbf2a73b23776f7b844fee22fa99cee13be579f8e","serverName":"platform-api-customer","capabilities":["logging","prompts","resources","tools"],"serverVersion":"0.12.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-22T00:31:00.809Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":36,"error":null,"detail":{"tools":[{"name":"get_catalog_templates","description":"Return the enabled ApplicationTemplate catalog, ordered by name. Call this to\ndiscuss trial and template options with a prospect or customer before starting a\nt"},{"name":"list_consents","description":"Return the caller's own recorded consents plus the tenant-scope consents of\nevery tenant where the caller is at least a viewer. Call this to check which legal\nd"},{"name":"record_consent","description":"Record acceptance of a legal document version and return the entry; call this\nonly after showing the user the document URL and version and receiving an\nexplicit"},{"name":"start_inquiry","description":"Store an anonymous inquiry draft and email a 6-digit verification code.\nAsk the user for the code, then call verify_inquiry with the returned\nchallenge_id and c"},{"name":"verify_inquiry","description":"Verify the 6-digit code and deliver the inquiry to the helpdesk inbox."},{"name":"accept_invitation","description":"Accept a pending invitation and grant the invitee's first role assignment.\nCall this when an invitee has a valid invite link and wants to join the\ntenant; singl"},{"name":"get_my_access","description":"Return the caller's access level per related tenant. Call this to check\nwhat the current caller is authorized to do before attempting an action\nthat requires a "},{"name":"create_access_request","description":"Request access to the tenant that owns the caller's verified email domain."},{"name":"approve_access_request","description":"Approve a pending access request: issue a `member` invitation to the\nrequester and resolve the request (level `admin` or `owner` of the\nrequest's tenant). The r"},{"name":"dismiss_access_request","description":"Dismiss a pending access request (level `admin` or `owner` of the\nrequest's tenant). The requester is mailed — naming the tenant, never the\ndismissing admin — a"},{"name":"withdraw_access_request","description":"Withdraw the caller's own pending access request; no notification is\nsent. Any other caller gets 404 `access_request.not_found`, the same as\nfor an unknown id. "},{"name":"enrich_domain","description":"Fetch the caller's domain imprint and suggest legal-entity details (UC-057)."},{"name":"start_device_login","description":"Sign in to an existing account by device login (UC-091, RFC 8628). Anonymous,\nempty body; the account must exist (start_account_registration, then set the\npassw"},{"name":"verify_device_login","description":"Poll a device login to token issuance (UC-091, RFC 8628). Anonymous. While\nthe human has not signed in yet it answers `{\"status\": \"pending\",\n\"retry_after\": <sec"},{"name":"start_account_registration","description":"Start registering a 4chems account with a business email address (`email`,\n`name`, optional `company`). Anonymous. Emails a 6-digit code to the address;\nno acco"},{"name":"verify_account_registration","description":"Verify the emailed 6-digit code (`challenge_id`, `code`) and create the\n4chems account. Never guess or retry codes, and never ask the user for a\npassword."},{"name":"start_registration","description":"DEPRECATED: use start_device_login. Deprecated — use start_device_login (same behaviour)."},{"name":"verify_registration","description":"DEPRECATED: use verify_device_login. Deprecated — use verify_device_login (same behaviour)."},{"name":"get_onboarding_route","description":"Return the next onboarding step. If this doesn't answer your question, call\n`start_inquiry` to ask 4chems directly or request a call."},{"name":"create_self_service_tenant","description":"Create a 7-day trial tenant for the caller's business email domain (UC-052).\nNeeds a verified email on a business domain and `attestation: true`; answers\n`auth."},{"name":"get_my_operation","description":"Return the status, result and error of an operation the caller started, such as\nthe `Location` of a `202` from `complete_billing`. Call this to poll it to compl"},{"name":"get_legal_entity_types","description":"Return the legal-entity types available for *country*, ordered alphabetically.\nIf this doesn't answer your question, call `start_inquiry` to ask 4chems directly"},{"name":"get_billing","description":"Return the tenant's stored billing details: VAT id, invoice address, invoice\nemail and PO reference. Call this to check whether billing is complete; only\nthe ow"},{"name":"complete_billing","description":"Complete the tenant's billing details: legal-entity name and type, VAT id,\ninvoice address, invoice email and optional PO reference. Call this when the\nowner or"},{"name":"list_invitations","description":"List all invitations for the caller's tenant, most recent first. Call this to\nshow a tenant admin which invitations are pending, accepted, or revoked; the\nraw t"},{"name":"create_invitation","description":"Invite an email address to the caller's tenant at the specified access\nlevel and return the invitation, including the raw single-use accept\ntoken. Call this whe"},{"name":"revoke_invitation","description":"Revoke a pending invitation so its token can no longer be accepted. Call this\nwhen a tenant admin wants to withdraw an invite sent by mistake or no longer\nneede"},{"name":"list_members","description":"List tenant members with their effective role x scope assignments."},{"name":"grant_assignment","description":"Grant a role x scope assignment to a tenant member."},{"name":"revoke_assignment","description":"Revoke a role x scope assignment from a tenant member."},{"name":"list_tenant_services","description":"Return the caller's tenant's active service subscriptions. Call this before\noffering to add a service, to check what is already subscribed."},{"name":"add_tenant_service","description":"Request a new service subscription for the caller's tenant and return its\nstatus. Call this when a tenant admin wants to add a service (ADR 0016\ncode fix: requi"}],"toolCount":32,"toolsHash":"6001d4e2d9665d4e9d3ef79bbf2a73b23776f7b844fee22fa99cee13be579f8e","serverName":"platform-api-customer","capabilities":["logging","prompts","resources","tools"],"serverVersion":"0.12.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-21T17:33:36.197Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":38,"error":null,"detail":{"tools":[{"name":"get_catalog_templates","description":"Return the enabled ApplicationTemplate catalog, ordered by name. Call this to\ndiscuss trial and template options with a prospect or customer before starting a\nt"},{"name":"list_consents","description":"Return the caller's own recorded consents plus the tenant-scope consents of\nevery tenant where the caller is at least a viewer. Call this to check which legal\nd"},{"name":"record_consent","description":"Record acceptance of a legal document version and return the entry; call this\nonly after showing the user the document URL and version and receiving an\nexplicit"},{"name":"start_inquiry","description":"Store an anonymous inquiry draft and email a 6-digit verification code.\nAsk the user for the code, then call verify_inquiry with the returned\nchallenge_id and c"},{"name":"verify_inquiry","description":"Verify the 6-digit code and deliver the inquiry to the helpdesk inbox."},{"name":"accept_invitation","description":"Accept a pending invitation and grant the invitee's first role assignment.\nCall this when an invitee has a valid invite link and wants to join the\ntenant; singl"},{"name":"get_my_access","description":"Return the caller's access level per related tenant. Call this to check\nwhat the current caller is authorized to do before attempting an action\nthat requires a "},{"name":"create_access_request","description":"Request access to the tenant that owns the caller's verified email domain."},{"name":"approve_access_request","description":"Approve a pending access request: issue a `member` invitation to the\nrequester and resolve the request (level `admin` or `owner` of the\nrequest's tenant). The r"},{"name":"dismiss_access_request","description":"Dismiss a pending access request (level `admin` or `owner` of the\nrequest's tenant). The requester is mailed — naming the tenant, never the\ndismissing admin — a"},{"name":"withdraw_access_request","description":"Withdraw the caller's own pending access request; no notification is\nsent. Any other caller gets 404 `access_request.not_found`, the same as\nfor an unknown id. "},{"name":"enrich_domain","description":"Fetch the caller's domain imprint and suggest legal-entity details (UC-057)."},{"name":"start_device_login","description":"Sign in to an existing account by device login (UC-091, RFC 8628). Anonymous,\nempty body; the account must exist (start_account_registration, then set the\npassw"},{"name":"verify_device_login","description":"Poll a device login to token issuance (UC-091, RFC 8628). Anonymous. While\nthe human has not signed in yet it answers `{\"status\": \"pending\",\n\"retry_after\": <sec"},{"name":"start_account_registration","description":"Start registering a 4chems account with a business email address (`email`,\n`name`, optional `company`). Anonymous. Emails a 6-digit code to the address;\nno acco"},{"name":"verify_account_registration","description":"Verify the emailed 6-digit code (`challenge_id`, `code`) and create the\n4chems account. Never guess or retry codes, and never ask the user for a\npassword."},{"name":"start_registration","description":"DEPRECATED: use start_device_login. Deprecated — use start_device_login (same behaviour)."},{"name":"verify_registration","description":"DEPRECATED: use verify_device_login. Deprecated — use verify_device_login (same behaviour)."},{"name":"get_onboarding_route","description":"Return the next onboarding step. If this doesn't answer your question, call\n`start_inquiry` to ask 4chems directly or request a call."},{"name":"create_self_service_tenant","description":"Create a 7-day trial tenant for the caller's business email domain (UC-052).\nNeeds a verified email on a business domain and `attestation: true`; answers\n`auth."},{"name":"get_my_operation","description":"Return the status, result and error of an operation the caller started, such as\nthe `Location` of a `202` from `complete_billing`. Call this to poll it to compl"},{"name":"get_legal_entity_types","description":"Return the legal-entity types available for *country*, ordered alphabetically.\nIf this doesn't answer your question, call `start_inquiry` to ask 4chems directly"},{"name":"get_billing","description":"Return the tenant's stored billing details: VAT id, invoice address, invoice\nemail and PO reference. Call this to check whether billing is complete; only\nthe ow"},{"name":"complete_billing","description":"Complete the tenant's billing details: legal-entity name and type, VAT id,\ninvoice address, invoice email and optional PO reference. Call this when the\nowner or"},{"name":"list_invitations","description":"List all invitations for the caller's tenant, most recent first. Call this to\nshow a tenant admin which invitations are pending, accepted, or revoked; the\nraw t"},{"name":"create_invitation","description":"Invite an email address to the caller's tenant at the specified access\nlevel and return the invitation, including the raw single-use accept\ntoken. Call this whe"},{"name":"revoke_invitation","description":"Revoke a pending invitation so its token can no longer be accepted. Call this\nwhen a tenant admin wants to withdraw an invite sent by mistake or no longer\nneede"},{"name":"list_members","description":"List tenant members with their effective role x scope assignments."},{"name":"grant_assignment","description":"Grant a role x scope assignment to a tenant member."},{"name":"revoke_assignment","description":"Revoke a role x scope assignment from a tenant member."},{"name":"list_tenant_services","description":"Return the caller's tenant's active service subscriptions. Call this before\noffering to add a service, to check what is already subscribed."},{"name":"add_tenant_service","description":"Request a new service subscription for the caller's tenant and return its\nstatus. Call this when a tenant admin wants to add a service (ADR 0016\ncode fix: requi"}],"toolCount":32,"toolsHash":"6001d4e2d9665d4e9d3ef79bbf2a73b23776f7b844fee22fa99cee13be579f8e","serverName":"platform-api-customer","capabilities":["logging","prompts","resources","tools"],"serverVersion":"0.12.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-21T06:27:02.330Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":63,"error":null,"detail":{"tools":[{"name":"get_catalog_templates","description":"Return the enabled ApplicationTemplate catalog, ordered by name. Call this to\ndiscuss trial and template options with a prospect or customer before starting a\nt"},{"name":"list_consents","description":"Return the caller's own recorded consents plus the tenant-scope consents of\nevery tenant where the caller is at least a viewer. Call this to check which legal\nd"},{"name":"record_consent","description":"Record acceptance of a legal document version and return the entry; call this\nonly after showing the user the document URL and version and receiving an\nexplicit"},{"name":"start_inquiry","description":"Store an anonymous inquiry draft and email a 6-digit verification code.\nAsk the user for the code, then call verify_inquiry with the returned\nchallenge_id and c"},{"name":"verify_inquiry","description":"Verify the 6-digit code and deliver the inquiry to the helpdesk inbox."},{"name":"accept_invitation","description":"Accept a pending invitation and grant the invitee's first role assignment.\nCall this when an invitee has a valid invite link and wants to join the\ntenant; singl"},{"name":"get_my_access","description":"Return the caller's access level per related tenant. Call this to check\nwhat the current caller is authorized to do before attempting an action\nthat requires a "},{"name":"create_access_request","description":"Request access to the tenant that owns the caller's verified email domain."},{"name":"approve_access_request","description":"Approve a pending access request: issue a `member` invitation to the\nrequester and resolve the request (level `admin` or `owner` of the\nrequest's tenant). The r"},{"name":"dismiss_access_request","description":"Dismiss a pending access request (level `admin` or `owner` of the\nrequest's tenant). The requester is mailed — naming the tenant, never the\ndismissing admin — a"},{"name":"withdraw_access_request","description":"Withdraw the caller's own pending access request; no notification is\nsent. Any other caller gets 404 `access_request.not_found`, the same as\nfor an unknown id. "},{"name":"enrich_domain","description":"Fetch the caller's domain imprint and suggest legal-entity details (UC-057)."},{"name":"start_device_login","description":"Sign in to an existing account by device login (UC-091, RFC 8628). Anonymous,\nempty body; the account must exist (start_account_registration, then set the\npassw"},{"name":"verify_device_login","description":"Poll a device login to token issuance (UC-091, RFC 8628). Anonymous. While\nthe human has not signed in yet it answers `{\"status\": \"pending\",\n\"retry_after\": <sec"},{"name":"start_account_registration","description":"Start registering a 4chems account with a business email address (`email`,\n`name`, optional `company`). Anonymous. Emails a 6-digit code to the address;\nno acco"},{"name":"verify_account_registration","description":"Verify the emailed 6-digit code (`challenge_id`, `code`) and create the\n4chems account. Never guess or retry codes, and never ask the user for a\npassword."},{"name":"start_registration","description":"DEPRECATED: use start_device_login. Deprecated — use start_device_login (same behaviour)."},{"name":"verify_registration","description":"DEPRECATED: use verify_device_login. Deprecated — use verify_device_login (same behaviour)."},{"name":"get_onboarding_route","description":"Return the next onboarding step. If this doesn't answer your question, call\n`start_inquiry` to ask 4chems directly or request a call."},{"name":"create_self_service_tenant","description":"Create a 7-day trial tenant for the caller's business email domain (UC-052).\nNeeds a verified email on a business domain and `attestation: true`; answers\n`auth."},{"name":"get_my_operation","description":"Return the status, result and error of an operation the caller started, such as\nthe `Location` of a `202` from `complete_billing`. Call this to poll it to compl"},{"name":"get_legal_entity_types","description":"Return the legal-entity types available for *country*, ordered alphabetically.\nIf this doesn't answer your question, call `start_inquiry` to ask 4chems directly"},{"name":"get_billing","description":"Return the tenant's stored billing details: VAT id, invoice address, invoice\nemail and PO reference. Call this to check whether billing is complete; only\nthe ow"},{"name":"complete_billing","description":"Complete the tenant's billing details: legal-entity name and type, VAT id,\ninvoice address, invoice email and optional PO reference. Call this when the\nowner or"},{"name":"list_invitations","description":"List all invitations for the caller's tenant, most recent first. Call this to\nshow a tenant admin which invitations are pending, accepted, or revoked; the\nraw t"},{"name":"create_invitation","description":"Invite an email address to the caller's tenant at the specified access\nlevel and return the invitation, including the raw single-use accept\ntoken. Call this whe"},{"name":"revoke_invitation","description":"Revoke a pending invitation so its token can no longer be accepted. Call this\nwhen a tenant admin wants to withdraw an invite sent by mistake or no longer\nneede"},{"name":"list_members","description":"List tenant members with their effective role x scope assignments."},{"name":"grant_assignment","description":"Grant a role x scope assignment to a tenant member."},{"name":"revoke_assignment","description":"Revoke a role x scope assignment from a tenant member."},{"name":"list_tenant_services","description":"Return the caller's tenant's active service subscriptions. Call this before\noffering to add a service, to check what is already subscribed."},{"name":"add_tenant_service","description":"Request a new service subscription for the caller's tenant and return its\nstatus. Call this when a tenant admin wants to add a service (ADR 0016\ncode fix: requi"}],"toolCount":32,"toolsHash":"6001d4e2d9665d4e9d3ef79bbf2a73b23776f7b844fee22fa99cee13be579f8e","serverName":"platform-api-customer","capabilities":["logging","prompts","resources","tools"],"serverVersion":"0.12.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-21T00:28:40.947Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":35,"error":null,"detail":{"tools":[{"name":"get_catalog_templates","description":"Return the enabled ApplicationTemplate catalog, ordered by name. Call this to\ndiscuss trial and template options with a prospect or customer before starting a\nt"},{"name":"list_consents","description":"Return the caller's own recorded consents plus the tenant-scope consents of\nevery tenant where the caller is at least a viewer. Call this to check which legal\nd"},{"name":"record_consent","description":"Record acceptance of a legal document version and return the entry; call this\nonly after showing the user the document URL and version and receiving an\nexplicit"},{"name":"start_inquiry","description":"Store an anonymous inquiry draft and email a 6-digit verification code.\nAsk the user for the code, then call verify_inquiry with the returned\nchallenge_id and c"},{"name":"verify_inquiry","description":"Verify the 6-digit code and deliver the inquiry to the helpdesk inbox."},{"name":"accept_invitation","description":"Accept a pending invitation and grant the invitee's first role assignment.\nCall this when an invitee has a valid invite link and wants to join the\ntenant; singl"},{"name":"get_my_access","description":"Return the caller's access level per related tenant. Call this to check\nwhat the current caller is authorized to do before attempting an action\nthat requires a "},{"name":"create_access_request","description":"Request access to the tenant that owns the caller's verified email domain."},{"name":"approve_access_request","description":"Approve a pending access request: issue a `member` invitation to the\nrequester and resolve the request (level `admin` or `owner` of the\nrequest's tenant). The r"},{"name":"dismiss_access_request","description":"Dismiss a pending access request (level `admin` or `owner` of the\nrequest's tenant). The requester is mailed — naming the tenant, never the\ndismissing admin — a"},{"name":"withdraw_access_request","description":"Withdraw the caller's own pending access request; no notification is\nsent. Any other caller gets 404 `access_request.not_found`, the same as\nfor an unknown id. "},{"name":"enrich_domain","description":"Fetch the caller's domain imprint and suggest legal-entity details (UC-057)."},{"name":"start_device_login","description":"Sign in to an existing account by device login (UC-091, RFC 8628). Anonymous,\nempty body; the account must exist (start_account_registration, then set the\npassw"},{"name":"verify_device_login","description":"Poll a device login to token issuance (UC-091, RFC 8628). Anonymous. While\nthe human has not signed in yet it answers `{\"status\": \"pending\",\n\"retry_after\": <sec"},{"name":"start_account_registration","description":"Start registering a 4chems account with a business email address (`email`,\n`name`, optional `company`). Anonymous. Emails a 6-digit code to the address;\nno acco"},{"name":"verify_account_registration","description":"Verify the emailed 6-digit code (`challenge_id`, `code`) and create the\n4chems account. Never guess or retry codes, and never ask the user for a\npassword."},{"name":"start_registration","description":"DEPRECATED: use start_device_login. Deprecated — use start_device_login (same behaviour)."},{"name":"verify_registration","description":"DEPRECATED: use verify_device_login. Deprecated — use verify_device_login (same behaviour)."},{"name":"get_onboarding_route","description":"Return the next onboarding step. If this doesn't answer your question, call\n`start_inquiry` to ask 4chems directly or request a call."},{"name":"create_self_service_tenant","description":"Create a 7-day trial tenant for the caller's business email domain (UC-052).\nNeeds a verified email on a business domain and `attestation: true`; answers\n`auth."},{"name":"get_my_operation","description":"Return the status, result and error of an operation the caller started, such as\nthe `Location` of a `202` from `complete_billing`. Call this to poll it to compl"},{"name":"get_legal_entity_types","description":"Return the legal-entity types available for *country*, ordered alphabetically.\nIf this doesn't answer your question, call `start_inquiry` to ask 4chems directly"},{"name":"get_billing","description":"Return the tenant's stored billing details: VAT id, invoice address, invoice\nemail and PO reference. Call this to check whether billing is complete; only\nthe ow"},{"name":"complete_billing","description":"Complete the tenant's billing details: legal-entity name and type, VAT id,\ninvoice address, invoice email and optional PO reference. Call this when the\nowner or"},{"name":"list_invitations","description":"List all invitations for the caller's tenant, most recent first. Call this to\nshow a tenant admin which invitations are pending, accepted, or revoked; the\nraw t"},{"name":"create_invitation","description":"Invite an email address to the caller's tenant at the specified access\nlevel and return the invitation, including the raw single-use accept\ntoken. Call this whe"},{"name":"revoke_invitation","description":"Revoke a pending invitation so its token can no longer be accepted. Call this\nwhen a tenant admin wants to withdraw an invite sent by mistake or no longer\nneede"},{"name":"list_members","description":"List tenant members with their effective role x scope assignments."},{"name":"grant_assignment","description":"Grant a role x scope assignment to a tenant member."},{"name":"revoke_assignment","description":"Revoke a role x scope assignment from a tenant member."},{"name":"list_tenant_services","description":"Return the caller's tenant's active service subscriptions. Call this before\noffering to add a service, to check what is already subscribed."},{"name":"add_tenant_service","description":"Request a new service subscription for the caller's tenant and return its\nstatus. Call this when a tenant admin wants to add a service (ADR 0016\ncode fix: requi"}],"toolCount":32,"toolsHash":"6001d4e2d9665d4e9d3ef79bbf2a73b23776f7b844fee22fa99cee13be579f8e","serverName":"platform-api-customer","capabilities":["logging","prompts","resources","tools"],"serverVersion":"0.12.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-20T17:27:25.170Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":38,"error":null,"detail":{"tools":[{"name":"get_catalog_templates","description":"Return the enabled ApplicationTemplate catalog, ordered by name. Call this to\ndiscuss trial and template options with a prospect or customer before starting a\nt"},{"name":"list_consents","description":"Return the caller's own recorded consents plus the tenant-scope consents of\nevery tenant where the caller is at least a viewer. Call this to check which legal\nd"},{"name":"record_consent","description":"Record acceptance of a legal document version and return the entry; call this\nonly after showing the user the document URL and version and receiving an\nexplicit"},{"name":"start_inquiry","description":"Store an anonymous inquiry draft and email a 6-digit verification code.\nAsk the user for the code, then call verify_inquiry with the returned\nchallenge_id and c"},{"name":"verify_inquiry","description":"Verify the 6-digit code and deliver the inquiry to the helpdesk inbox."},{"name":"accept_invitation","description":"Accept a pending invitation and grant the invitee's first role assignment.\nCall this when an invitee has a valid invite link and wants to join the\ntenant; singl"},{"name":"get_my_access","description":"Return the caller's access level per related tenant. Call this to check\nwhat the current caller is authorized to do before attempting an action\nthat requires a "},{"name":"create_access_request","description":"Request access to the tenant that owns the caller's verified email domain."},{"name":"approve_access_request","description":"Approve a pending access request: issue a `member` invitation to the\nrequester and resolve the request (level `admin` or `owner` of the\nrequest's tenant). The r"},{"name":"dismiss_access_request","description":"Dismiss a pending access request (level `admin` or `owner` of the\nrequest's tenant). The requester is mailed — naming the tenant, never the\ndismissing admin — a"},{"name":"withdraw_access_request","description":"Withdraw the caller's own pending access request; no notification is\nsent. Any other caller gets 404 `access_request.not_found`, the same as\nfor an unknown id. "},{"name":"enrich_domain","description":"Fetch the caller's domain imprint and suggest legal-entity details (UC-057)."},{"name":"start_device_login","description":"Sign in to an existing account by device login (UC-091, RFC 8628). Anonymous,\nempty body; the account must exist (start_account_registration, then set the\npassw"},{"name":"verify_device_login","description":"Poll a device login to token issuance (UC-091, RFC 8628). Anonymous. While\nthe human has not signed in yet it answers `{\"status\": \"pending\",\n\"retry_after\": <sec"},{"name":"start_account_registration","description":"Start registering a 4chems account with a business email address (`email`,\n`name`, optional `company`). Anonymous. Emails a 6-digit code to the address;\nno acco"},{"name":"verify_account_registration","description":"Verify the emailed 6-digit code (`challenge_id`, `code`) and create the\n4chems account. Never guess or retry codes, and never ask the user for a\npassword."},{"name":"start_registration","description":"DEPRECATED: use start_device_login. Deprecated — use start_device_login (same behaviour)."},{"name":"verify_registration","description":"DEPRECATED: use verify_device_login. Deprecated — use verify_device_login (same behaviour)."},{"name":"get_onboarding_route","description":"Return the next onboarding step. If this doesn't answer your question, call\n`start_inquiry` to ask 4chems directly or request a call."},{"name":"create_self_service_tenant","description":"Create a 7-day trial tenant for the caller's business email domain (UC-052).\nNeeds a verified email on a business domain and `attestation: true`; answers\n`auth."},{"name":"get_my_operation","description":"Return the status, result and error of an operation the caller started, such as\nthe `Location` of a `202` from `complete_billing`. Call this to poll it to compl"},{"name":"get_legal_entity_types","description":"Return the legal-entity types available for *country*, ordered alphabetically.\nIf this doesn't answer your question, call `start_inquiry` to ask 4chems directly"},{"name":"get_billing","description":"Return the tenant's stored billing details: VAT id, invoice address, invoice\nemail and PO reference. Call this to check whether billing is complete; only\nthe ow"},{"name":"complete_billing","description":"Complete the tenant's billing details: legal-entity name and type, VAT id,\ninvoice address, invoice email and optional PO reference. Call this when the\nowner or"},{"name":"list_invitations","description":"List all invitations for the caller's tenant, most recent first. Call this to\nshow a tenant admin which invitations are pending, accepted, or revoked; the\nraw t"},{"name":"create_invitation","description":"Invite an email address to the caller's tenant at the specified access\nlevel and return the invitation, including the raw single-use accept\ntoken. Call this whe"},{"name":"revoke_invitation","description":"Revoke a pending invitation so its token can no longer be accepted. Call this\nwhen a tenant admin wants to withdraw an invite sent by mistake or no longer\nneede"},{"name":"list_members","description":"List tenant members with their effective role x scope assignments."},{"name":"grant_assignment","description":"Grant a role x scope assignment to a tenant member."},{"name":"revoke_assignment","description":"Revoke a role x scope assignment from a tenant member."},{"name":"list_tenant_services","description":"Return the caller's tenant's active service subscriptions. Call this before\noffering to add a service, to check what is already subscribed."},{"name":"add_tenant_service","description":"Request a new service subscription for the caller's tenant and return its\nstatus. Call this when a tenant admin wants to add a service (ADR 0016\ncode fix: requi"}],"toolCount":32,"toolsHash":"6001d4e2d9665d4e9d3ef79bbf2a73b23776f7b844fee22fa99cee13be579f8e","serverName":"platform-api-customer","capabilities":["logging","prompts","resources","tools"],"serverVersion":"0.12.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-20T10:26:15.160Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":39,"error":null,"detail":{"tools":[{"name":"get_catalog_templates","description":"Return the enabled ApplicationTemplate catalog, ordered by name. Call this to\ndiscuss trial and template options with a prospect or customer before starting a\nt"},{"name":"list_consents","description":"Return the caller's own recorded consents plus the tenant-scope consents of\nevery tenant where the caller is at least a viewer. Call this to check which legal\nd"},{"name":"record_consent","description":"Record acceptance of a legal document version and return the entry; call this\nonly after showing the user the document URL and version and receiving an\nexplicit"},{"name":"start_inquiry","description":"Store an anonymous inquiry draft and email a 6-digit verification code.\nAsk the user for the code, then call verify_inquiry with the returned\nchallenge_id and c"},{"name":"verify_inquiry","description":"Verify the 6-digit code and deliver the inquiry to the helpdesk inbox."},{"name":"accept_invitation","description":"Accept a pending invitation and grant the invitee's first role assignment.\nCall this when an invitee has a valid invite link and wants to join the\ntenant; singl"},{"name":"get_my_access","description":"Return the caller's access level per related tenant. Call this to check\nwhat the current caller is authorized to do before attempting an action\nthat requires a "},{"name":"create_access_request","description":"Request access to the tenant that owns the caller's verified email domain."},{"name":"approve_access_request","description":"Approve a pending access request: issue a `member` invitation to the\nrequester and resolve the request (level `admin` or `owner` of the\nrequest's tenant). The r"},{"name":"dismiss_access_request","description":"Dismiss a pending access request (level `admin` or `owner` of the\nrequest's tenant). The requester is mailed — naming the tenant, never the\ndismissing admin — a"},{"name":"withdraw_access_request","description":"Withdraw the caller's own pending access request; no notification is\nsent. Any other caller gets 404 `access_request.not_found`, the same as\nfor an unknown id. "},{"name":"enrich_domain","description":"Fetch the caller's domain imprint and suggest legal-entity details (UC-057)."},{"name":"start_device_login","description":"Sign in to an existing account by device login (UC-091, RFC 8628). Anonymous,\nempty body; the account must exist (start_account_registration, then set the\npassw"},{"name":"verify_device_login","description":"Poll a device login to token issuance (UC-091, RFC 8628). Anonymous. While\nthe human has not signed in yet it answers `{\"status\": \"pending\",\n\"retry_after\": <sec"},{"name":"start_account_registration","description":"Start registering a 4chems account with a business email address (`email`,\n`name`, optional `company`). Anonymous. Emails a 6-digit code to the address;\nno acco"},{"name":"verify_account_registration","description":"Verify the emailed 6-digit code (`challenge_id`, `code`) and create the\n4chems account. Never guess or retry codes, and never ask the user for a\npassword."},{"name":"start_registration","description":"DEPRECATED: use start_device_login. Deprecated — use start_device_login (same behaviour)."},{"name":"verify_registration","description":"DEPRECATED: use verify_device_login. Deprecated — use verify_device_login (same behaviour)."},{"name":"get_onboarding_route","description":"Return the next onboarding step. If this doesn't answer your question, call\n`start_inquiry` to ask 4chems directly or request a call."},{"name":"create_self_service_tenant","description":"Create a 7-day trial tenant for the caller's business email domain (UC-052).\nNeeds a verified email on a business domain and `attestation: true`; answers\n`auth."},{"name":"get_my_operation","description":"Return the status, result and error of an operation the caller started, such as\nthe `Location` of a `202` from `complete_billing`. Call this to poll it to compl"},{"name":"get_legal_entity_types","description":"Return the legal-entity types available for *country*, ordered alphabetically.\nIf this doesn't answer your question, call `start_inquiry` to ask 4chems directly"},{"name":"get_billing","description":"Return the tenant's stored billing details: VAT id, invoice address, invoice\nemail and PO reference. Call this to check whether billing is complete; only\nthe ow"},{"name":"complete_billing","description":"Complete the tenant's billing details: legal-entity name and type, VAT id,\ninvoice address, invoice email and optional PO reference. Call this when the\nowner or"},{"name":"list_invitations","description":"List all invitations for the caller's tenant, most recent first. Call this to\nshow a tenant admin which invitations are pending, accepted, or revoked; the\nraw t"},{"name":"create_invitation","description":"Invite an email address to the caller's tenant at the specified access\nlevel and return the invitation, including the raw single-use accept\ntoken. Call this whe"},{"name":"revoke_invitation","description":"Revoke a pending invitation so its token can no longer be accepted. Call this\nwhen a tenant admin wants to withdraw an invite sent by mistake or no longer\nneede"},{"name":"list_members","description":"List tenant members with their effective role x scope assignments."},{"name":"grant_assignment","description":"Grant a role x scope assignment to a tenant member."},{"name":"revoke_assignment","description":"Revoke a role x scope assignment from a tenant member."},{"name":"list_tenant_services","description":"Return the caller's tenant's active service subscriptions. Call this before\noffering to add a service, to check what is already subscribed."},{"name":"add_tenant_service","description":"Request a new service subscription for the caller's tenant and return its\nstatus. Call this when a tenant admin wants to add a service (ADR 0016\ncode fix: requi"}],"toolCount":32,"toolsHash":"6001d4e2d9665d4e9d3ef79bbf2a73b23776f7b844fee22fa99cee13be579f8e","serverName":"platform-api-customer","capabilities":["logging","prompts","resources","tools"],"serverVersion":"0.12.1","protocolVersion":"2025-06-18"}}],"tools":[{"name":"get_catalog_templates","description":"Return the enabled ApplicationTemplate catalog, ordered by name. Call this to\ndiscuss trial and template options with a prospect or customer before starting a\nt"},{"name":"list_consents","description":"Return the caller's own recorded consents plus the tenant-scope consents of\nevery tenant where the caller is at least a viewer. Call this to check which legal\nd"},{"name":"record_consent","description":"Record acceptance of a legal document version and return the entry; call this\nonly after showing the user the document URL and version and receiving an\nexplicit"},{"name":"start_inquiry","description":"Store an anonymous inquiry draft and email a 6-digit verification code.\nAsk the user for the code, then call verify_inquiry with the returned\nchallenge_id and c"},{"name":"verify_inquiry","description":"Verify the 6-digit code and deliver the inquiry to the helpdesk inbox."},{"name":"accept_invitation","description":"Accept a pending invitation and grant the invitee's first role assignment.\nCall this when an invitee has a valid invite link and wants to join the\ntenant; singl"},{"name":"get_my_access","description":"Return the caller's access level per related tenant. Call this to check\nwhat the current caller is authorized to do before attempting an action\nthat requires a "},{"name":"create_access_request","description":"Request access to the tenant that owns the caller's verified email domain."},{"name":"approve_access_request","description":"Approve a pending access request: issue a `member` invitation to the\nrequester and resolve the request (level `admin` or `owner` of the\nrequest's tenant). The r"},{"name":"dismiss_access_request","description":"Dismiss a pending access request (level `admin` or `owner` of the\nrequest's tenant). The requester is mailed — naming the tenant, never the\ndismissing admin — a"},{"name":"withdraw_access_request","description":"Withdraw the caller's own pending access request; no notification is\nsent. Any other caller gets 404 `access_request.not_found`, the same as\nfor an unknown id. "},{"name":"enrich_domain","description":"Fetch the caller's domain imprint and suggest legal-entity details (UC-057)."},{"name":"start_device_login","description":"Sign in to an existing account by device login (UC-091, RFC 8628). Anonymous,\nempty body; the account must exist (start_account_registration, then set the\npassw"},{"name":"verify_device_login","description":"Poll a device login to token issuance (UC-091, RFC 8628). Anonymous. While\nthe human has not signed in yet it answers `{\"status\": \"pending\",\n\"retry_after\": <sec"},{"name":"start_account_registration","description":"Start registering a 4chems account with a business email address (`email`,\n`name`, optional `company`). Anonymous. Emails a 6-digit code to the address;\nno acco"},{"name":"verify_account_registration","description":"Verify the emailed 6-digit code (`challenge_id`, `code`) and create the\n4chems account. Never guess or retry codes, and never ask the user for a\npassword."},{"name":"start_registration","description":"DEPRECATED: use start_device_login. Deprecated — use start_device_login (same behaviour)."},{"name":"verify_registration","description":"DEPRECATED: use verify_device_login. Deprecated — use verify_device_login (same behaviour)."},{"name":"get_onboarding_route","description":"Return the next onboarding step. If this doesn't answer your question, call\n`start_inquiry` to ask 4chems directly or request a call."},{"name":"create_self_service_tenant","description":"Create a 7-day trial tenant for the caller's business email domain (UC-052).\nNeeds a verified email on a business domain and `attestation: true`; answers\n`auth."},{"name":"get_my_operation","description":"Return the status, result and error of an operation the caller started, such as\nthe `Location` of a `202` from `complete_billing`. Call this to poll it to compl"},{"name":"get_legal_entity_types","description":"Return the legal-entity types available for *country*, ordered alphabetically.\nIf this doesn't answer your question, call `start_inquiry` to ask 4chems directly"},{"name":"get_billing","description":"Return the tenant's stored billing details: VAT id, invoice address, invoice\nemail and PO reference. Call this to check whether billing is complete; only\nthe ow"},{"name":"complete_billing","description":"Complete the tenant's billing details: legal-entity name and type, VAT id,\ninvoice address, invoice email and optional PO reference. Call this when the\nowner or"},{"name":"list_invitations","description":"List all invitations for the caller's tenant, most recent first. Call this to\nshow a tenant admin which invitations are pending, accepted, or revoked; the\nraw t"},{"name":"create_invitation","description":"Invite an email address to the caller's tenant at the specified access\nlevel and return the invitation, including the raw single-use accept\ntoken. Call this whe"},{"name":"revoke_invitation","description":"Revoke a pending invitation so its token can no longer be accepted. Call this\nwhen a tenant admin wants to withdraw an invite sent by mistake or no longer\nneede"},{"name":"list_members","description":"List tenant members with their effective role x scope assignments."},{"name":"grant_assignment","description":"Grant a role x scope assignment to a tenant member."},{"name":"revoke_assignment","description":"Revoke a role x scope assignment from a tenant member."},{"name":"list_tenant_services","description":"Return the caller's tenant's active service subscriptions. Call this before\noffering to add a service, to check what is already subscribed."},{"name":"add_tenant_service","description":"Request a new service subscription for the caller's tenant and return its\nstatus. Call this when a tenant admin wants to add a service (ADR 0016\ncode fix: requi"}],"package":null,"toolSurface":{"id":"ts_gs758q2frvg8","endpointId":"ep_ucf2qxfemhee","hash":"6001d4e2d9665d4e9d3ef79bbf2a73b23776f7b844fee22fa99cee13be579f8e","toolCount":32,"serverName":"platform-api-customer","serverVersion":"0.12.1","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-11T23:22:58.065Z","lastSeenAt":"2026-10-23T02:24:24.074Z","observations":41,"toolNames":["get_catalog_templates","list_consents","record_consent","start_inquiry","verify_inquiry","accept_invitation","get_my_access","create_access_request","approve_access_request","dismiss_access_request","withdraw_access_request","enrich_domain","start_device_login","verify_device_login","start_account_registration","verify_account_registration","start_registration","verify_registration","get_onboarding_route","create_self_service_tenant","get_my_operation","get_legal_entity_types","get_billing","complete_billing","list_invitations","create_invitation","revoke_invitation","list_members","grant_assignment","revoke_assignment","list_tenant_services","add_tenant_service"],"distinctSurfaces":1},"endpointFacts":[{"id":"ep_ucf2qxfemhee","url":"https://mcp.4chems.com/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-20T03:27:26.814Z","auth":{"observedAt":"2026-10-20T03:27:27.055Z","authRequired":false,"scheme":null,"resourceMetadata":{"url":"https://mcp.4chems.com/.well-known/oauth-protected-resource/mcp","resource":"https://mcp.4chems.com/mcp","authorizationServers":["https://iam.4chems.com/realms/4chems"],"scopesSupported":["mcp:tools"]},"authorizationServer":{"url":"https://iam.4chems.com/.well-known/oauth-authorization-server/realms/4chems","issuer":"https://iam.4chems.com/realms/4chems","grantTypesSupported":["authorization_code","client_credentials","implicit","password","refresh_token","urn:ietf:params:oauth:grant-type:device_code","urn:ietf:params:oauth:grant-type:jwt-bearer","urn:ietf:params:oauth:grant-type:token-exchange","urn:ietf:params:oauth:grant-type:uma-ticket","urn:openid:params:grant-type:ciba"],"codeChallengeMethodsSupported":["plain","S256"],"tokenEndpointAuthMethodsSupported":["private_key_jwt","client_secret_basic","client_secret_post","tls_client_auth","client_secret_jwt","none"],"dynamicClientRegistration":true,"dpopSigningAlgValuesSupported":["PS384","RS384","EdDSA","ES384","ES256","RS256","ES512","PS256","PS512","RS512"],"clientIdMetadataDocumentSupported":true},"conformance":{"dpop":true,"rfc8414":true,"rfc9728":true,"pkceS256":true,"clientIdMetadataDocument":true,"dynamicClientRegistration":true}},"tls":{"observedAt":"2026-10-20T03:27:27.138Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"mcp.4chems.com","issuer":{"commonName":"YR1","organization":"Let's Encrypt"},"validFrom":"2026-08-27T11:06:38.000Z","validTo":"2026-11-25T11:06:37.000Z","daysToExpiry":33,"sanCount":1,"fingerprint256":"B5:8B:8B:ED:CD:2B:4E:93:E2:0D:05:5C:15:94:CA:A6:E9:6C:D0:26:59:5A:F7:3F:C9:C2:60:52:9A:1B:5B:2E"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"com.4chems/platform-api","url":"https://registry.modelcontextprotocol.io/v0/servers/com.4chems%2Fplatform-api","firstSeenAt":"2026-10-11T23:18:16.353Z","fetchedAt":"2026-10-21T10:23:43.840Z","normalizedAt":"2026-10-21T10:23:43.840Z"}]},"firstSeenAt":"2026-10-11T23:18:16.353Z","updatedAt":"2026-10-23T02:28:37.848Z"}