Production snapshot: 24 October 2026. This page describes the running Linux server, not a proposed architecture. Recheck service status and configuration before an operational change.
Alkemata is several applications behind one HTTPS reverse proxy. They share an identity service where needed, but keep their application data and deployments separate.
| Public address | Purpose | Main runtime and source |
|---|---|---|
https://alkemata.com |
Editorial website, published articles, WordPress APIs | WordPress in Docker; /srv/alkemata/wordpress
|
https://map.alkemata.com |
Interactive knowledge map and REST API | Static web and Python API as user systemd services; /srv/alkemata/knowledge-map
|
https://auth.alkemata.com |
Alkemata login and OAuth | Keycloak in Docker; /srv/alkemata/auth/keycloak
|
https://projects.alkemata.com |
Project collaboration and wiki | OpenProject Community in Docker; /srv/alkemata/openproject
|
https://exchange.alkemata.com |
Moderated opportunities, contributions, and agent participation | FastAPI, worker, and PostgreSQL in Docker; /srv/alkemata/exchange
|
Traefik receives ports 80 and 443, terminates TLS, and routes these hostnames. Its configuration is in /srv/alkemata/traefik, with the current application routes in custom/*.yaml. Do not infer a deployment method from a repository's README alone: the map's active API and web frontend are user systemd services, while WordPress, Keycloak, OpenProject, Exchange, and Traefik run in Docker.
WordPress publishes the articles, pages, author profiles, and navigation at alkemata.com. The running stack is PHP 8.3/Apache with its own MySQL database. Its source/deployment files are under /srv/alkemata/wordpress; content and plugins are in the WordPress container and persistent storage. The mcp-adapter and alkemata-participation plugins support the public content and submission tools used by the Alkemata gateway.
WordPress also runs an independent Easy MCP administration endpoint at /wp-json/easy-mcp-ai/v1/mcp. It has its own OAuth setup and WordPress-oriented tools. It is active and must not be removed as part of gateway cleanup. Its broad administration functions are not the OpenProject tools.
The map's frontend is served by alkemata-map-web.service; its FastAPI backend is served by alkemata-map-api.service. The map has its own PostgreSQL 17 data directory under /srv/alkemata/knowledge-map/runtime, reached on host loopback. The map stores topics, placements, categories, relationships, trails, and editor state. Published WordPress article text remains in WordPress; the gateway fetches it rather than copying it into the map database.
The canonical shared MCP endpoint is:
https://alkemata.com/wp-json/mcp/alkemata-public
Traefik routes that path to the map API. The API exposes public WordPress and map read tools, proposal tools that queue submissions for review, and private tools with per-user authorization. For WordPress content tools, the API calls the WordPress MCP upstream through a specific internal gateway route. For openproject_* tools, it calls the private OpenProject bridge after validating an Alkemata OAuth token. These are different paths through one externally advertised gateway.
https://map.alkemata.com/mcp is a retired address and returns 404. https://alkemata.com/wp-json/alkemata-public is also not the gateway: it omits /mcp. The path-specific OAuth resource metadata for the canonical gateway is at /.well-known/oauth-protected-resource/wp-json/mcp/alkemata-public. The root /.well-known/oauth-protected-resource belongs to WordPress Easy MCP; do not use it to infer the gateway's OAuth settings.
Keycloak 26.8 runs with a separate PostgreSQL database. The alkemata realm provides user login and OAuth for the map gateway, OpenProject browser SSO, and Exchange. Client configuration, redirect URLs, scopes, and token audiences live here. Do not put client secrets, application passwords, tokens, or .env contents in this wiki.
Public article and map reads need no account. Private map writes require knowledge:contribute plus the person's map role. OpenProject reads and edits require projects:read and projects:write respectively, plus that person's OpenProject project permissions. An OAuth client must also be configured to request those optional scopes; newly dynamically registered clients may not have them automatically.
OpenProject 17 Community has its own PostgreSQL database, cache, worker, and collaboration containers. Browser sign-in passes from Traefik through OAuth2 Proxy and Keycloak. A private LDAP mirror supplies verified Keycloak user profiles to OpenProject; openproject-ldap-sync.timer refreshes it every five minutes. OpenProject's membership and roles remain the final authority for project access.
The private MCP bridge is internal. It checks signed requests and the matching OpenProject user's permissions before reading or editing work packages and wiki pages. OpenProject's Enterprise MCP add-on is not used. Agents reach these tools through the canonical Alkemata gateway above, not through a separate public OpenProject MCP URL. The OpenProject deployment and bridge are under /srv/alkemata/openproject.
There are currently three OpenProject project spaces: Website alkemata, Demo project, and Scrum project. These are collaboration spaces and should not be confused with the server's deployment directories. This architecture page belongs to Website alkemata.
Exchange is a separate FastAPI application with its own PostgreSQL 17 database and background worker. It handles moderated opportunities, claims, versioned contributions, reviews, participant roles, and agent participation. It uses Keycloak identity but not the WordPress, map, or OpenProject database. Its REST and MCP interfaces are served on exchange.alkemata.com. Its present map-link adapter records intended provenance links; it does not automatically publish map content. Source and operating guides are under /srv/alkemata/exchange.
/srv/alkemata/ReasonReport and /srv/alkemata/migration contain separate source or migration material. They were not among the running production containers or user services in this snapshot. /srv/alkemata/mcp-registry contains registry assets. Do not treat the presence of a directory as proof that it is a live service.
Browser or agent
-> Traefik / HTTPS
-> WordPress / MySQL (editorial content)
-> Map web + API / map PostgreSQL (knowledge map)
-> Keycloak / identity PostgreSQL (login and OAuth)
-> OpenProject / project PostgreSQL (project work and wiki)
-> Exchange / exchange PostgreSQL (moderated participation)
Agent -> canonical Alkemata MCP gateway (map API)
-> WordPress MCP upstream for published content and proposals
-> map database for topics and trails
-> private OpenProject bridge for authorized project operations
WordPress Easy MCP -> separate WordPress administration connection
The shared gateway can list tool names without exposing private project data. A project tool call must carry a valid OAuth token and pass both scope and OpenProject permission checks. WordPress Easy MCP is an independent service with different tools and authorization; keep it when changing the shared gateway.
| Area | Where to inspect or change it | Deployment / recovery note |
|---|---|---|
| HTTPS routes | /srv/alkemata/traefik/custom/*.yaml |
Traefik watches these route files. Check which hostname and path a rule matches before changing it. |
| Map API and web |
/srv/alkemata/knowledge-map; systemctl --user status alkemata-map-api.service alkemata-map-web.service
|
Active deployment is user systemd, not the alternative Compose recipe in the repository. The map has its own backup and smoke-test scripts. |
| WordPress |
/srv/alkemata/wordpress and the wordpress-blog-1 / wordpress-database-1 containers |
Preserve the active WordPress MCP plugins and persistent database/content volumes. |
| Identity |
/srv/alkemata/auth/keycloak and Keycloak containers |
Back up the realm database before changing clients, scopes, audiences, or login policy. |
| OpenProject |
/srv/alkemata/openproject; COMMUNITY_SSO_MCP.md
|
Preserve its database and assets. The LDAP sync timer is part of sign-in. |
| Exchange |
/srv/alkemata/exchange; docs/operations.md
|
Its daily user systemd backup timer makes encrypted dumps and runs a restore verification. Off-host backup storage still needs an owner-selected destination. |
Use docker ps for container status, systemctl --user list-units --type=service for the native map services, and systemctl --user list-timers for the backup and LDAP-sync timers. Check each project's own operations guide before migrations, upgrades, or restores. Do not place credentials or decrypted backups in this wiki or in a public repository.
/srv/alkemata/knowledge-map/README.md (some legacy MCP addresses remain in that file; use the live route described above)/srv/alkemata/openproject/COMMUNITY_SSO_MCP.md
/srv/alkemata/exchange/docs/architecture.md and docs/operations.md
25 October 2026 · For everyday use of Website alkemata. No installation steps.
Open Alkemata Projects, sign in with your Alkemata account, and select Website alkemata. Choose Work packages to see tasks and Wiki to read documentation.
Try this small exercise: open Documentation #39, read its current content, then use the instructions below to propose a specific improvement, record the result, and link the relevant wiki page. The examples in this tutorial are suggestions: they have not been created as extra tasks.
The project currently offers Task, Milestone, and Summary task types. Button labels can vary with language and version. Work packages and Wiki are enabled; other modules mentioned below depend on project settings and permissions.
| What you want to record | Where to put it | Alkemata example |
|---|---|---|
| An action with an owner and an outcome | Work package | Check the map link on mobile |
| A larger area divided into actions | Parent work package with children | Documentation → contributor guide, review, corrections |
| A target event or delivery date | Milestone | Contributor guide ready |
| Instructions or a durable decision | Wiki page | How to submit an article |
| A question or progress update about one task | That task's Activity comments | Review requested; two links still need checking |
| Evidence or a deliverable | Task attachment or a link to its source | Screenshot, test report, design file |
A work package is OpenProject's general term for a tracked item. Give each actionable task one clear outcome. Prefer “Test login with a new contributor account” to “Login stuff”.
Description template
The assignee does the work. If an Accountable field is available, use it for the person responsible for the outcome. If the person you need is missing, first check that the correct project is selected, then ask a project manager to check membership.
Use Documentation #39 as an existing parent if that matches the team's plan.
Example children: Draft contributor guide, Check guide as a new user, Apply review corrections. Give each its own assignee and completion criteria.
Use a parent-child relationship for “part of”. Use a predecessor/successor relation for “must happen before”. A documentation task can be part of Documentation while also following a separate testing task.
Open a task and click its current Status to choose an allowed next status. The available transitions depend on its type and your role; use the options actually offered.
In Activity, add a short comment:
Draft ready: [paste wiki URL]. Please check the first-login instructions. Remaining issue: confirm the review contact.
Type @ and select a member when asking for a specific response. Keep the description as the current agreed scope; use comments for progress and discussion.
If blocked, record what is missing, who can help, and the next step. Do not mark a task complete just because a draft exists: compare the result with “Done when”, attach evidence, and request review. Once accepted, select the appropriate closed status.
Editing, comments, and mentions
Create another view for the team: open tasks, grouped by assignee, with upcoming dates visible. Choose public visibility only when you intend other permitted users to reuse that view; a public view does not grant access to a private project.
If a task disappears, remove filters before assuming it was deleted. Closed tasks are often excluded.
Filters, columns, grouping, and saved views
If Gantt charts appears in the project menu:
Example: Draft guide → Test instructions → Apply corrections → Guide accepted.
The Gantt chart shows the same work packages as the task table. Editing one updates the shared task. Working days affect duration; check the displayed dates after dragging bars. Scheduling mode affects how dependent dates move, so inspect the result rather than assuming every change propagates.
If Boards is enabled:
Moving a card on a Basic board does not automatically change the work package's status. Update Status separately.
Removing a card from a board does not delete the underlying task. Use the task table and its Status field as the reliable progress record if maintaining both becomes cumbersome.
To improve an existing page, open it and choose Edit. Use headings and short procedures. Add a link to another page using the editor's link controls or wiki syntax such as [[Contributor onboarding]].
Suggested page structure: Purpose → Before you start → Steps → How to check success → Common problems → Resources.
Keep decisions and reusable instructions here so they remain findable after a task closes. For technical background, see Alkemata server architecture and project inventory.
Open a work package's Files tab and use Attach files or drag and drop, if uploads are enabled. Name files clearly, for example contributor-guide-review-2026-10-25.pdf, and explain their purpose in a comment.
For a document already maintained elsewhere, paste its canonical link and check that reviewers can open it. Keep one authoritative editable copy. Attachments are useful for evidence and snapshots; uploading a file does not by itself create a Git-like document editing workflow.
If Nextcloud or another file storage is configured, use its integration for linked files; do not assume that integration is available merely because OpenProject supports it.
People: a project manager can open Members, add an existing user or invite a new one where permitted, and assign a suitable role. Account creation and project membership are separate: signing in alone does not guarantee access. Give contributors the rights they need to work and reviewers the rights they need to review.
AI assistants: Alkemata's private MCP tools currently support listing projects, reading/creating/editing work packages, and reading/creating/editing wiki pages under the connected user's permissions. Example request:
In Website alkemata, read Documentation #39 and the existing wiki pages. Draft a task description with acceptance criteria, then update that task and link this tutorial. Preserve existing material.
Be explicit about whether the assistant should draft or save changes. The exposed tools do not currently offer assignee/date editing, file uploads, or comment creation; perform those steps in the browser. Agents use the same project access rules as the signed-in user.
In your account menu, open Account settings → Notification and email. Choose the events and email frequency that fit your work. Follow/watch the tasks you need to review where that control is available.
Use mentions for a concrete question or review request. Check notifications regularly, but keep the final answer or decision on the task or wiki page so another contributor can find it.
| Problem | What to do |
|---|---|
| Website alkemata is missing | Check the signed-in account and ask a manager to check project membership. |
| A create/edit button is absent | Check your project role; ask a manager to check permissions or whether the module is enabled. |
| A status is unavailable | Use a permitted transition; ask about the configured workflow if it prevents the intended action. |
| A task is missing from a view | Clear filters, include closed statuses, and confirm the project. |
| An assignee is unavailable | Select the project first; check membership. |
| Gantt or Boards is absent | Ask whether the project module is enabled; continue with Work packages. |
| A saved edit conflicts | Reload the latest content, compare changes, and reapply your edit without overwriting another contributor's work. |
For broader reference, use the official user guide and getting-started tutorials and videos. This tutorial uses the live project inventory and official documentation checked on 25 October 2026; the official website may describe a newer interface.