AI assistants are good at writing code, but they often guess when you ask them an Umbraco question. They can't see the community forum, and the answer you need is usually in a thread someone already solved. UForum-MCP is a small server I built to fix that. It lets an AI assistant search the Umbraco forum, the official docs and GitHub directly.
This article explains how it works, and shows how little code a basic MCP server needs.
What is MCP?
The Model Context Protocol (MCP) is a standard way for an AI assistant to use outside tools. You run an MCP server, connect it to an assistant such as Cursor, and the assistant can call the tools the server offers instead of relying only on what it remembers.
What UForum-MCP can do
The server is a .NET 10 NuGet package. It offers these tools:
- Search the forum for relevant posts and topics, with direct links to the discussions.
- Get the latest topics, to see what the community is talking about right now.
- List the categories, so a search can be focused on the right part of the forum.
- Search everywhere at once. One call searches the forum, the official documentation and GitHub together, and can take your Umbraco version.
- Extract code snippets from the results, with the solution code highlighted separately from other examples.
- Draft a forum post when no solution is found, as a well-formatted post that includes your Umbraco version.
How it talks to the forum
The Umbraco forum runs on Discourse, which exposes its data as JSON. The server calls a few simple endpoints:
search.json?q=...to searcht/{topicId}.jsonto read one topiclatest.jsonfor recent activitycategories.jsonfor the list of categories
That is most of the magic. The server turns an assistant's request into one of these calls, and tidies up the result so the assistant can read it.
A tiny MCP server in C#
Here is a simplified sketch, not the package's real code, of a server with one tool. It uses the official MCP C# SDK.
using System.ComponentModel;
using ModelContextProtocol.Server;
[McpServerToolType]
public static class ForumTools
{
[McpServerTool, Description("Search the Umbraco community forum.")]
public static async Task<string> SearchForum(
HttpClient http,
[Description("What to search for")] string query)
{
var url = $"https://forum.umbraco.com/search.json?q={Uri.EscapeDataString(query)}";
return await http.GetStringAsync(url);
}
}And the startup code that hosts it:
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddHttpClient();
builder.Services
.AddMcpServer()
.WithStdioServerTransport()
.WithToolsFromAssembly();
await builder.Build().RunAsync();The description text matters more than it looks. The assistant reads it to decide when to use your tool, so write it clearly.
Tips if you build your own
- Start with one tool and get it working in your assistant before adding more.
- Return clean results. Raw JSON works, but shorter, tidier text uses fewer tokens and gives better answers.
- Ask for the version. Umbraco changes a lot between versions, so a tool that takes the version in as input finds better answers.
- Let it say "not found". Drafting a good forum post when nothing is found is more useful than a made-up answer.
Try it
UForum-MCP is on NuGet and needs the .NET 10 SDK or later. You can find it on the NuGet page.