BesluitBron 1.4.4-23 Status Sign in

Architecture

Last changed on .

BesluitBron consists of a single process running on a single port. That process serves three endpoints that do not need to be aware of one another: the MCP addresses for an AI assistant, the public website and the management console. Each path corresponds to exactly one endpoint. Any access outside of these results in a 404 error.

The decision to opt for a single process was a deliberate one. If each source platform were a separate service, the same buffering, logging and error handling would be required for each platform. The question ‘which sources does this installation offer?’ would then have to be answered on a service-by-service basis rather than in one place. See Connectorregister.

The process seen from above

flowchart TD
    CL["AI assistant<br/>Claude Desktop,<br/>claude.ai, Claude Code"] --> MCP["MCP addresses<br/>/ mcp/ori to<br/>/ mcp/unified /v1"]
    BE["Visitor to<br/>the website"] --> SITE["Public website<br/>16 languages"]
    BR["Browser from<br/>the administrator"] --> ADM["Management console<br/>explorer, logbook,<br/>dashboard"]
    CAT["ConnectorCatalog<br/>which sources are<br/>offered"] --> MCP
    CAT --> SITE
    CAT --> ADM
    MCP --> SURF["McpConnectorSurface<br/>one toolbox<br/>per address"]
    SURF --> EXEC["ToolExecutor<br/>time measurement, origin,<br/>logging"]
    ADM --> QS
    EXEC --> QS["Search services by platform<br/>structure of the search query"]
    QS --> UC["UpstreamCache<br/>separated by platform"]
    QS --> UP["The source platforms<br/>see Sources"]
    EXEC --> LOG["McpRequestLog<br/>table plus ring buffer"]
    LOG --> DATA[("Storage<br/>log, exports,<br/>optionalPostgreSQL18")]
    LOG --> HUB["SignalR -hub<br/>live dashboard"]
    HUB --> BR

The source platforms are listed here as a single group. Details of which platforms these are, and what each platform can and cannot do, are available for each platform at Bronnen.

The regular features

  • ConnectorCatalog is the only one that answers the question of which sources this installation offers. See Connectorregister;
  • McpConnectorSurface creates a separate toolbox for each connector. Each session is assigned the toolbox corresponding to the address from which it arrived. This allows eight toolboxes to co-exist within a single process;
  • ToolExecutor is present for every call: this component measures the duration, records the origin and writes the log. A tool that omitted that step would be invisible in the audit trail;
  • The search engines for each platform translate a query into that platform’s search language. They remove any characters from the input that might interfere with the search language, and they limit the scope of the result;
  • UpstreamCache is separated by platform. A slow or malfunctioning platform therefore does not affect the other six. See Buffering en Doorlooptijd.

Adding a platform adds files

Adding an eighth source platform involves three steps: adding files with the name of that platform, adding a settings block, and entering a single line in the connector register. Existing files are not altered in the process. This is not a matter of stylistic preference. It is the reason why, after the first one, the six platforms were each made available within a few days, without affecting the operation of the existing ones.

The exception is clearly stated. The management console menus and the website footer list their rules one by one. These two elements will therefore be updated when a new source is added.

Read more