feat: run MCP server in backend using Grafana Live #574
+1,663
−144
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adds three main things:
MCP server
The backend plugin now runs an MCP server using Grafana Live, using what is effectively a new transport. Each session is stored in a
sync.Map
. Similar to the SSE transport, clients receive data over the stream and can send requests by publishing to the stream.Frontend helpers
There are a few helpers added to the frontend to make this possible (or easier) to use. Specifically:
GrafanaLiveTransport
, a custom transport for MCP clients that uses the Grafana Live Protocol to communicate with the MCP server.MCPClientProvider
component, which is a React context provider that provides anMCPClient
instance to the rest of the application.useMCPClient
, that fetches theMCPClient
instance from the context.Frontend type updates
The OpenAI types were woefully out of date; this updates various function/tool call related ones.
There's an example of all this being used in this PR to the
grafana-plugin-examples
repo.