Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enhancement: Model Context Protocol (MCP) support #4876

Open
1 task done
danny-avila opened this issue Dec 6, 2024 Discussed in #4815 · 28 comments
Open
1 task done

Enhancement: Model Context Protocol (MCP) support #4876

danny-avila opened this issue Dec 6, 2024 Discussed in #4815 · 28 comments
Labels
enhancement New feature or request

Comments

@danny-avila
Copy link
Owner

Discussed in #4815

Originally posted by karstennilsen November 30, 2024

What features would you like to see added?

Anthropic released Model Context Protocol (MCP)

Implement support for Anthropic’s newly announced Model Context Protocol (MCP) in LibreChat. MCP aims to standardize interactions with AI models, offering consistent and predictable behavior across different implementations. Integrating this protocol will enhance LibreChat’s interoperability, streamline interactions, and potentially allow broader compatibility with a increasing number of MCP servers.

More details

There are existing MCP-compliant servers available that can be self-hosted. These can be used when LibreChat is a MCP client. The example servers, hosted on GitHub, provide ready-to-use implementations of the Model Context Protocol for various use cases.

Typescript SDK

https://github.com/modelcontextprotocol/typescript-sdk

Which components are impacted by your request?

Endpoints

Pictures

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct
@danny-avila danny-avila added the enhancement New feature or request label Dec 6, 2024
@zeemy23
Copy link

zeemy23 commented Dec 6, 2024

since this is basically introducing agents, you might consider implementing the agent orchestration layer, as well. this would make for a compelling langchain alternative. https://awslabs.github.io/multi-agent-orchestrator/general/how-it-works/

@danny-avila
Copy link
Owner Author

since this is basically introducing agents

Not necessarily, the categories that most interest me are: resources, tools, prompts.

I believe the multi-agent orchestrator you're referring to is limited to AWS agents/models and does not refer to MCP (but could be a "sampling" MCP), whereas LibreChat already has an agents component and is fully capable of multi-agent orchestration (not yet implemented, but have developed some prototypes), which expands the access to models to virtually everything supported by LibreChat.

@juicesharp
Copy link

Agree with @danny-avila, this is not about agents but more about data in/data out. LLMs without data are just a brain in a tank, and MCP-like protocol changes everything in this department. The first-class support of MCP servers by a good MCP client can teleport to the Moon a product in the point of view of available functionality. Some issues I see along the road: servers management is kind of like a "Store" for MCP servers. Ability to connect (enable) and configure (?) servers from the list of available servers. First-class UI to look up resources and prompts. The last one is obvious after using the Claude Desktop, as their list of resources does not have even a simple filter. Also, the ability of models to look up for tools. More tools mean more issues to resolve a proper tool by LLM, even for the most powerful models, so the tools exposed by a MCP servers should be toggleable inside UI somewhere close to the Chat window.

@grexzen
Copy link

grexzen commented Dec 8, 2024

Hi! So, how do we customize actions for agents. The custom action works fine in assistants, but seems the agent cannot see any of the endpoints there.

Same with tools, I can add them to the plugins or assistants to choose, but no custom tools show up in agents either.

Thanks!

@danny-avila
Copy link
Owner Author

Hi! So, how do we customize actions for agents. The custom action works fine in assistants, but seems the agent cannot see any of the endpoints there.

Same with tools, I can add them to the plugins or assistants to choose, but no custom tools show up in agents either.

Thanks!

@grexzen This is unrelated to this post, create a "troubleshooting" discussion post describing the action and provide the openapi schema if possible.

If you have a fork with tools added in the code, it may not be outright supported, sharing any details about that in a dedicated post would help, too.

@danny-avila
Copy link
Owner Author

I'm working on this and starting to make significant progress.

My one grievance with this is that the majority of MCP servers out are all STDIO with no other options.

This is great if you are running LibreChat locally and you are the only user, but it's not viable for remote/production.

There is SSE support and currently testing how well this works at scale, also found this comment by the devs on this issue:

We're definitely interested in extending MCP to cover remote connections as well. Both SDKs already support an SSE transport with that in mind: https://modelcontextprotocol.io/docs/concepts/transports#ser...

However, it's not quite a complete story yet. Remote connections introduce a lot more questions and complexity—related to deployment, auth, security, etc. We'll be working through these in the coming weeks, and would love any and all input!

source: https://news.ycombinator.com/item?id=42237424

One potential cool possibility for this is allowing users to bring-their-own-mcp servers, that could be running locally but sends requests to the remote deployment, though the MCP framework doesn't offer an out-of-the-box solution and would require something robust to be made that is compatible with the web. Could be a lot of work and may consider it after MCP is integrated to begin with.

@steven2030
Copy link

Is there a simple strategy that we could set up for single users. I'm an artist and digital tinkerer using MCP claude desktop and I love how fast I can build. I have a bunch of ideas, but I can't get MCP to work on LibreChat, even though Claude and I are attempting in all sorts of ways. Can I help? Testing or ...

@MusiCode1
Copy link

MusiCode1 commented Dec 12, 2024

I agree with the request to add support for MCP servers, and as soon as possible...

Right now, no matter how much I searched, I couldn't find a decent open source MCP client.
The closest thing is a VSCode plugin called Continue.bev, but it currently only supports one server and no more.

If LibreChat is the first open source client to support MCP servers, it would be a huge advantage over all the rest.

Even if you only implement StdIO, and not SSE, it would be a game changer for me and others. Because I want to use MCP servers not through a claude desktop that is limited in the number of requests.

@justjoehere
Copy link

I think STDIO MCP servers are extremely limiting and damn near impossible to troubleshoot. I think SSE is the way to go. I've created a gradio (python) chat interface (MCP client) that can spin up STDIO MCP server, like Claude desktop, or can connect to a SSE server. The POC I built can support a mix of types as well. I only have tools up and running to prove the basic concept. Aside from security, SSE will be easier to maintain and scale.

@danny-avila
Copy link
Owner Author

danny-avila commented Dec 17, 2024

I should have initial support pushed to main soon. For now, only tools are implemented. I will then move on to Resources, then Prompts.

Testing puppeteer:
chrome_MUdBILa6XF

chrome_E3j1KnOrrd

Any connected servers would then populate the tools dialog for Agents. I'm just finishing integration for Assistants API, though Agents is recommended over using it, since there isn't an easy way to support images in tool results for Assistants among other reasons.

@cbusillo
Copy link

This is great. Since the mcp server config is in the librechat.yaml, do we need to restart the docker container when changing the configuration? This question is directed towards the docker based install, since that is what I am using. Is there an option to store the config in the db and refresh from the UI?

Thanks again for everyone working on this. Its exactly what I have been looking for.

@danny-avila
Copy link
Owner Author

@cbusillo yes it requires a container restart following changes, similar to Claude desktop.

Glad this can serve you, more work to be done for Resources and Prompts.

@johnnyoshika
Copy link

Thanks for the MCP option. This is fantastic!

That said, I'm not quite able to get the model to connect to an mcp server. The model keeps responding to my prompt as if it doesn't know about the external tool.

I've configured my environment like this:

librechat.yaml

# For more information, see the Configuration Guide:
# https://www.librechat.ai/docs/configuration/librechat_yaml

# Configuration version (required)
version: 1.1.5

mcpServers:
  sqlite:
    # type: stdio
    command: /Users/johnny/.pyenv/shims/uvx
    args:
      - "@modelcontextprotocol/mcp-server-sqlite"
      - "--db-path"
      - "/Users/johnny/path/to/database.db"

docker-compose.override.yml

version: '3.4'
 
services:
  api:
    volumes:
      - type: bind
        source: ./librechat.yaml
        target: /app/librechat.yaml

Startup:

docker compose up -d

Prompt:

model: claude-3-5-sonnet-latest

Connect to my sqlite database and list the teams in there

Response:

I am not able to directly connect to your SQLite database. To help you list the teams, you would need to:

  • Provide me with the database file or connection details
  • Share the relevant SQL query or table name

Once you provide these details, I can help you write and execute the appropriate query to list the teams from your database.

@harrylaou
Copy link

@johnnyoshika https://www.librechat.ai/docs/configuration/logging
Probably the answer is in the logs.
I haven't installed MCP yet, but in troubleshooting installation they are helpful to corner the error.

@cbusillo
Copy link

@johnnyoshika did you make an agent with your tool added?

@johnnyoshika
Copy link

johnnyoshika commented Dec 24, 2024

Thanks @harrylaou for pointing me to the logs. uvx wasn't being installed into the container, so here's what I ended up with after numerous different attempts.

Note: it still doesn't work - npx mcp servers might be easier to get up and running, LOL.

Created docker-entrypoint.sh:

#!/bin/sh
# This script requires executable permissions (chmod +x) to run in container
# chmod +x ./docker-entrypoint.sh

set -e

# Install UV only if not already installed
if [ ! -f "/root/.local/bin/uvx" ]; then
    echo "Installing UV..."
    curl -LsSf https://github.com/astral-sh/uv/releases/latest/download/uv-installer.sh | sh
fi

# Add UVX to PATH
export PATH="/root/.local/bin:$PATH"

# Debug info
echo "UVX location: $(which uvx)"
echo "UVX version: $(uvx --version)"
echo "Starting command: $@"

# Execute the original command
if [ $# -eq 0 ]; then
    exec npm run backend
else
    exec "$@"
fi

Added the following to docker-compose.override.yml:

version: '3.4'
 
services:
  api:
    volumes:
      - type: bind
        source: ./docker-entrypoint.sh
        target: /docker-entrypoint.sh
      - type: bind
        source: ./librechat.yaml
        target: /app/librechat.yaml
      - type: bind
        source: /path/to/database/file.db
        target: /data/file.db
    entrypoint: ["/bin/sh", "/docker-entrypoint.sh"]

Made the database very permissible on the host:

chmod 777 /path/to/database/file.db

librechat.yaml:

# For more information, see the Configuration Guide:
# https://www.librechat.ai/docs/configuration/librechat_yaml

# Configuration version (required)
version: 1.1.5

mcpServers:
  sqlite:
    # type: stdio
    command: /root/.local/bin/uvx
    args:
      - "@modelcontextprotocol/mcp-server-sqlite"
      - "--db-path"
      - "/data/file.db"

With this, I got uvx installed inside the container, but running the MCP server is still problematic. Excerpt from the debug log file:

2024-12-24T19:38:18.751Z info: [Optional] Redis not initialized. Note: Redis support is experimental.
2024-12-24T19:38:19.250Z info: Connected to MongoDB
2024-12-24T19:38:19.305Z debug: [indexSync] There are 10 messages and 10 indexed
2024-12-24T19:38:19.305Z debug: [indexSync] There are 5 convos and 5 indexed
2024-12-24T19:38:19.317Z info: Custom config file loaded:
2024-12-24T19:38:19.317Z info: {
  "version": "1.1.5",
  "mcpServers": {
    "sqlite": {
      "command": "/root/.local/bin/uvx",
      "args": [
        "@modelcontextprotocol/mcp-... [truncated]
2024-12-24T19:38:19.317Z debug: Custom config:
{
  version: "1.1.5",
    sqlite.command: "/root/.local/bin/uvx",
    // 3 arg(s)
    sqlite.args: ["@modelcontextprotocol/mcp-server-sqlite","--db-path","/data/file.db"],
}
2024-12-24T19:38:19.318Z warn: Default value for CREDS_KEY is being used.
2024-12-24T19:38:19.318Z warn: Default value for CREDS_IV is being used.
2024-12-24T19:38:19.318Z warn: Default value for JWT_SECRET is being used.
2024-12-24T19:38:19.318Z warn: Default value for JWT_REFRESH_SECRET is being used.
2024-12-24T19:38:19.318Z info: Please replace any default secret values.
2024-12-24T19:38:19.318Z info: ​

    For your convenience, use this tool to generate your own secret values:
    https://www.librechat.ai/toolkit/creds_generator

    ​
2024-12-24T19:38:19.458Z info: RAG API is running and reachable at http://rag_api:8000.
2024-12-24T19:38:19.469Z info: [MCP] Initializing servers
2024-12-24T19:38:19.469Z info: [MCP][sqlite] Connection state: connecting
2024-12-24T19:38:19.471Z debug: [MCP][sqlite] Transport sending: {"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{"tools":{}},"clientInfo":{"name":"lib... [truncated]
2024-12-24T19:38:19.478Z info: [MCP][sqlite] Connection state: error
2024-12-24T19:38:19.479Z error: [MCP][sqlite] Connection failed: MCP error -1: Connection closed
2024-12-24T19:38:21.485Z info: [MCP][sqlite] Connection state: disconnected
2024-12-24T19:38:21.486Z info: [MCP][sqlite] Connection state: connecting
2024-12-24T19:38:21.491Z debug: [MCP][sqlite] Transport sending: {"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{"tools":{}},"clientInfo":{"name":"lib... [truncated]
2024-12-24T19:38:21.504Z info: [MCP][sqlite] Connection state: error
2024-12-24T19:38:21.505Z error: [MCP][sqlite] Connection failed: MCP error -1: Connection closed
2024-12-24T19:38:25.508Z info: [MCP][sqlite] Connection state: disconnected
2024-12-24T19:38:25.510Z info: [MCP][sqlite] Connection state: connecting
2024-12-24T19:38:25.515Z debug: [MCP][sqlite] Transport sending: {"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{"tools":{}},"clientInfo":{"name":"lib... [truncated]
2024-12-24T19:38:25.529Z info: [MCP][sqlite] Connection state: error
2024-12-24T19:38:25.529Z error: [MCP][sqlite] Connection failed: MCP error -1: Connection closed
2024-12-24T19:38:25.530Z error: [MCP][sqlite] Failed after 3 attempts
2024-12-24T19:38:25.530Z error: [MCP][sqlite] Initialization failed MCP error -1: Connection closed
2024-12-24T19:38:25.530Z info: [MCP] Initialized 0/1 server(s)
2024-12-24T19:38:25.530Z warn: [MCP] 1/1 server(s) failed to initialize
2024-12-24T19:38:25.530Z info: [MCP][sqlite] ✗ Failed
2024-12-24T19:38:25.530Z error: [MCP] No servers initialized
2024-12-24T19:38:25.534Z info: No changes needed for 'USER' role permissions
2024-12-24T19:38:25.536Z info: No changes needed for 'ADMIN' role permissions
2024-12-24T19:38:25.536Z info: Outdated Config version: 1.1.5
Latest version: 1.2.0

      Check out the Config changelogs for the latest options and features added.

      https://... [truncated]
2024-12-24T19:38:25.539Z info: Custom config file loaded:
2024-12-24T19:38:25.539Z info: {
  "version": "1.1.5",
  "mcpServers": {
    "sqlite": {
      "command": "/root/.local/bin/uvx",
      "args": [
        "@modelcontextprotocol/mcp-... [truncated]
2024-12-24T19:38:25.539Z debug: Custom config:
{
  version: "1.1.5",
    sqlite.command: "/root/.local/bin/uvx",
    // 3 arg(s)
    sqlite.args: ["@modelcontextprotocol/mcp-server-sqlite","--db-path","/data/file.db"],
}
2024-12-24T19:38:25.546Z info: Server listening on all interfaces at port 3080. Use http://localhost:3080 to access it

@johnnyoshika
Copy link

I got mcp working with an npx server. I tested this with brave-search.

librechat.yaml

mcpServers:
  brave-search:
    type: stdio
    command: npx
    args:
      - "-y"
      - "@modelcontextprotocol/server-brave-search"
    env:
      BRAVE_API_KEY: "[Redacted]"
      PATH: "/usr/local/bin:/usr/bin:/bin"
      NODE_PATH: "/usr/local/lib/node_modules"

Note: I got the same Initialization failed MCP error -1: Connection closed error as I did with the uvx mcp server (see above) until I added PATH and NODE_PATH env variables. This gives me some hint as to what's wrong with the uvx mcp server sdetup.

I also had to create an agent to test this as @cbusillo suggested.

It would still be nice to get this working with a uvx mcp server (e.g. @modelcontextprotocol/mcp-server-sqlite). Any suggestions?

@danny-avila
Copy link
Owner Author

Some discussions in the MCP repo might prove useful to people:
modelcontextprotocol/servers#40
modelcontextprotocol/servers#264

Note, the docker builds of LibreChat don't have the dependencies that uv/uvx require, I would need to test what we can do there

@basilesportif
Copy link

I have a dumb issue: I got MCP servers working, and LibreChat is connecting to them. However, I don't see any way to use them in chat, and when I try to reference them, Sonnet doesn't seem to be aware of their existence.

I'm probably missing a flag I need to turn on somewhere.

Screenshot 2024-12-29 at 14 04 33

@alexmhoward3
Copy link

@basilesportif it’s under Agents in the provider selector. You’ll need to activate the agents in the librechat.yaml file too if you haven’t already.

@basilesportif
Copy link

Got it. I had to use the disableBuilder: false option under agents, and then build a Tool that gave access to all my tools, and then it worked.

@johnnyoshika
Copy link

@basilesportif Can you elaborate on how you built a tool that gives access to all tools?

@che-kola
Copy link

che-kola commented Dec 31, 2024

@basilesportif I seem to have a similar problem as you, after the previous configuration is completed, I can't call the tool when I start the conversation, and then I just end the answer. When I use the disableBuilder: false option under agents, there is still no change, can you give me some suggestions
a
b
c

@hercules90
Copy link

Running into similar issue as @che-kola mentioned. @basilesportif would you please be able to elaborate more on your approach and how you got this to work?

@danny-avila
Copy link
Owner Author

@che-kola you have the agent builder available to you, have you added the tools to your current agent? It seems to be aware of it, so I'm guessing you do.

In that case, it would be helpful to know what provider/model you are using, it will need to support tools/function calls.

image

@maxhillaert
Copy link

Is there a way to add all tools for an MCP? I'm using intellij MCP server and it has a few dozen tools It's quite cumbersome to have to manually add them to the agent.

@danny-avila
Copy link
Owner Author

@maxhillaert
Not currently, but I may add a feature to do so, since it's commonly requested

@maxhillaert
Copy link

Hi. I'm having trouble getting LibreChat container to discover my running Windows 11 instance of intellij with MCP server plugin.

Instead of unpicking docker networking , I decided to run LibreChat with npm directly, but getting spawn npx ENOENT issues

e.g.

C:\Dev\LibreChat>npm run backend

> [email protected] backend
> cross-env NODE_ENV=production node api/server/index.js

2025-01-12 17:31:37 info: [Optional] Redis not initialized. Note: Redis support is experimental.
(node:18484) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
2025-01-12 17:31:39 info: Connected to MongoDB
2025-01-12 17:31:39 info: Custom config file loaded:
2025-01-12 17:31:39 info: {
  "version": "1.2.1",
  "cache": true,
  "registration": {
    "socialLogins": [
      "github",
      "google",
      "discord",
      "openid",
      "facebook"
    ]
  },
  "actions": {
    "allowedDomains": [
      "swapi.dev",
      "librechat.ai",
      "google.com"
    ]
  },
  "mcpServers": {
    "intellij": {
      "command": "npx",
      "args": [
        "-y",
        "@jetbrains/mcp-proxy"
      ],
      "env": {
        "LOG_ENABLED": "true",
        "IDE_PORT": "63342",
        "HOST": "127.0.0.1"
      }
    },
    "puppeteer": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-puppeteer"
      ]
    },
    "playwright": {
      "command": "npx",
      "args": [
        "-y",
        "@executeautomation/playwright-mcp-server"
      ]
    }
  }
}
2025-01-12 17:31:39 warn: Default value for CREDS_KEY is being used.
2025-01-12 17:31:39 warn: Default value for CREDS_IV is being used.
2025-01-12 17:31:39 warn: Default value for JWT_SECRET is being used.
2025-01-12 17:31:39 warn: Default value for JWT_REFRESH_SECRET is being used.
2025-01-12 17:31:39 info: Please replace any default secret values.
2025-01-12 17:31:39 info: ​

    For your convenience, use this tool to generate your own secret values:
    https://www.librechat.ai/toolkit/creds_generator

    ​
2025-01-12 17:31:39 warn: RAG API is either not running or not reachable at undefined, you may experience errors with file uploads.
2025-01-12 17:31:39 info: [MCP] Initializing servers
2025-01-12 17:31:39 info: [MCP][intellij] Connection state: connecting
2025-01-12 17:31:39 info: [MCP][puppeteer] Connection state: connecting
2025-01-12 17:31:39 info: [MCP][playwright] Connection state: connecting
2025-01-12 17:31:39 info: [MCP][intellij] Connection state: error
2025-01-12 17:31:39 info: [MCP][puppeteer] Connection state: error
2025-01-12 17:31:39 info: [MCP][playwright] Connection state: error
2025-01-12 17:31:39 error: [MCP][intellij] Connection failed: spawn npx ENOENT
2025-01-12 17:31:39 error: [MCP][puppeteer] Connection failed: spawn npx ENOENT
2025-01-12 17:31:39 error: [MCP][playwright] Connection failed: spawn npx ENOENT
2025-01-12 17:31:41 info: [MCP][intellij] Connection state: disconnected
2025-01-12 17:31:41 info: [MCP][intellij] Connection state: connecting
2025-01-12 17:31:41 info: [MCP][intellij] Connection state: error
2025-01-12 17:31:41 error: [MCP][intellij] Connection failed: spawn npx ENOENT
2025-01-12 17:31:41 info: [MCP][puppeteer] Connection state: disconnected
2025-01-12 17:31:41 info: [MCP][puppeteer] Connection state: connecting
2025-01-12 17:31:41 info: [MCP][puppeteer] Connection state: error
2025-01-12 17:31:41 error: [MCP][puppeteer] Connection failed: spawn npx ENOENT
2025-01-12 17:31:41 info: [MCP][playwright] Connection state: disconnected
2025-01-12 17:31:41 info: [MCP][playwright] Connection state: connecting
2025-01-12 17:31:41 info: [MCP][playwright] Connection state: error
2025-01-12 17:31:41 error: [MCP][playwright] Connection failed: spawn npx ENOENT
2025-01-12 17:31:45 info: [MCP][intellij] Connection state: disconnected
2025-01-12 17:31:45 info: [MCP][intellij] Connection state: connecting
2025-01-12 17:31:45 info: [MCP][intellij] Connection state: error
2025-01-12 17:31:45 error: [MCP][intellij] Connection failed: spawn npx ENOENT
2025-01-12 17:31:45 error: [MCP][intellij] Failed after 3 attempts
2025-01-12 17:31:45 error: [MCP][intellij] Initialization failed spawn npx ENOENT
2025-01-12 17:31:45 info: [MCP][puppeteer] Connection state: disconnected
2025-01-12 17:31:45 info: [MCP][puppeteer] Connection state: connecting
2025-01-12 17:31:45 info: [MCP][puppeteer] Connection state: error
2025-01-12 17:31:45 error: [MCP][puppeteer] Connection failed: spawn npx ENOENT
2025-01-12 17:31:45 error: [MCP][puppeteer] Failed after 3 attempts
2025-01-12 17:31:45 error: [MCP][puppeteer] Initialization failed spawn npx ENOENT
2025-01-12 17:31:45 info: [MCP][playwright] Connection state: disconnected
2025-01-12 17:31:45 info: [MCP][playwright] Connection state: connecting
2025-01-12 17:31:45 info: [MCP][playwright] Connection state: error
2025-01-12 17:31:45 error: [MCP][playwright] Connection failed: spawn npx ENOENT
2025-01-12 17:31:45 error: [MCP][playwright] Failed after 3 attempts
2025-01-12 17:31:45 error: [MCP][playwright] Initialization failed spawn npx ENOENT
2025-01-12 17:31:45 info: [MCP] Initialized 0/3 server(s)
2025-01-12 17:31:45 warn: [MCP] 3/3 server(s) failed to initialize
2025-01-12 17:31:45 info: [MCP][intellij] ✗ Failed
2025-01-12 17:31:45 info: [MCP][puppeteer] ✗ Failed
2025-01-12 17:31:45 info: [MCP][playwright] ✗ Failed
2025-01-12 17:31:45 error: [MCP] No servers initialized
2025-01-12 17:31:45 info: No changes needed for 'USER' role permissions
2025-01-12 17:31:45 info: No changes needed for 'ADMIN' role permissions
2025-01-12 17:31:45 info: Server listening at http://localhost:3080

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests