Skip to content

Feature request: per-request BookStack credentials via HTTP headers #25

Description

@Aluriak

Hello !

We are a team working with a locally deployed instance of bookstack and librechat. We would like to put an MCP server between them, and your project seems to be the right place to ask.

context

We have many users with different accesses to shelves, depending on their department. Those rights are handled at bookstack-acl level.

Currently, bookstack-mcp resolves its credentials once at startup, so every MCP user shares one BookStack identity. That flattens BookStack's own permission model: a user reaches, through the assistant, content scoped by the service token. Hence, everyone access the same pages, regardless of their departments.

What we would like

The ability to supply BookStack API credentials per request, via HTTP headers on the streamable-HTTP transport (falling back to the environment when absent). For instance, in librechat.yaml file :

mcpServers:
  bookstack:
    type: streamable-http
    url: http://mcp-bookstack:3000/mcp
    headers:
      X-Bookstack-Token-Id: "{{BOOKSTACK_TOKEN_ID}}"
      X-Bookstack-Token-Secret: "{{BOOKSTACK_TOKEN_SECRET}}"
    customUserVars:
      BOOKSTACK_TOKEN_ID: { title: "BookStack token ID" }
      BOOKSTACK_TOKEN_SECRET: { title: "BookStack token secret" }

Each user creates their own token in BookStack (Profile > API Tokens), paste it once, and the assistant then sees exactly what that user sees. Users who provide nothing fall back to the service token (defined in environment vars) the one with only reading rights on public pages.

Happy to contribute

If this direction fits your view of the project, we are glad to open a PR (which will be to be honest AI-assisted in its making). Tell us how you would have it shaped (env flag name, header names, whether the resolution belongs in the transport layer or in the config builder) so it can fit in the project. If you would rather not do that, no hard feelings, we understand that this project scope may not include ours.

Whatever is next, thank you for this project. We hope to see it grow soon :)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions