// for sitefinity developersC#, .NET, Rust
// mcp-server.md

Sitefinity MCP Server.

Your AI agent can read the code. It cannot see what Sitefinity actually did with it. This server gives Claude Code, Cursor, VS Code or any MCP client 31 tools for the parts that live in the database and the logs: which widgets sit on a page and what they are configured with, every page that uses a template, why the search index went stale, what the scheduler is stuck on, and what IIS saw when the app pool died.

C# / .NETMCP31 tools18 agent skillsmulti-environmentMIT
claude code
YouProduction went down around 11 last night. What happened?
→sitefinity_set_default_environment("prod")
→sitefinity_investigate_incident(time: "23:00")
ClaudeThe worker process crashed at 23:04 (WAS 5011).

For the next 90 seconds http.sys rejected 142 requests with 503 AppOffline, so they never reached Sitefinity's own log. Error.log has an OutOfMemoryException at 23:03, eighteen minutes into a search index rebuild.

// tools, all prefixed sitefinity_
31 total

Logs and incidents

4
sitefinity_read_log_file
Newest parsed entries, Error.log by default
sitefinity_search_logs
Regex search across every log, with context
sitefinity_list_log_files
Log files with size and modified date
sitefinity_investigate_incident
Sitefinity, IIS, Windows event and HTTPERR logs for one time window, side by side

Pages and routes

6
sitefinity_list_page_routes
Every page route, via the Sitemap API
sitefinity_list_api_routes
ServiceStack routes and OData entity sets
sitefinity_get_page_details
A page's template and every widget on it
sitefinity_get_widget_properties
One widget's saved designer values
sitefinity_get_page_widget_tree
Page layout as a placeholder tree
sitefinity_where_used
Every page and template that references a widget, item or template

Site and runtime

5
sitefinity_check_status
Is Sitefinity bootstrapped and ready
sitefinity_get_site_info
Version, .NET version, languages, multisite
sitefinity_list_modules
Installed modules, status, startup type
sitefinity_get_scheduled_task_status
Tasks running now, hung, or failed
sitefinity_list_search_indexes
Index health, and why one went stale

Content model

5
sitefinity_list_dynamic_types
Module Builder types and field counts
sitefinity_get_type_fields
Field definitions for one type
sitefinity_list_content
Live items of any type, with real Ids
sitefinity_list_templates
Page templates, MVC and WebForms
sitefinity_list_taxonomies
Categories, tags and their taxa

Config and permissions

4
sitefinity_list_config_sections
Registered config section names
sitefinity_get_config_section
What was changed in one section
sitefinity_search_settings
Full-text search over Advanced Settings
sitefinity_get_permissions
Effective per-role permissions, inheritance resolved

Forms

3
sitefinity_list_forms
Forms with field and submission counts
sitefinity_get_form_fields
Field developer names, types and choices
sitefinity_list_form_responses
Submissions, newest first, searchable

Environments and maintenance

4
sitefinity_list_environments
Environments in your config file
sitefinity_set_default_environment
Switch between dev, staging and prod
sitefinity_clear_cachewrite
Clear the output, whole or page cache
sitefinity_recycle_appwrite
Restart the application
// safe to point at production
  • Read-only unless you opt in. The two write tools need a flag in your config file and a switch in Sitefinity admin.
  • Any environment whose name starts with prod refuses writes, whatever the config says.
  • Keys, passwords, connection strings and sensitive form fields are redacted inside Sitefinity, before anything reaches the model.
  • Every request is written to McpAudit.log. Ten bad API keys from one IP in five minutes freezes that IP for fifteen.
terminal
# the server, on your machine. No .NET needed.
$npm install -g sitefinity-comm-mcp
# the plugin, from your Sitefinity web app root
$sitefinity-comm-mcp install-plugin
# one key, pasted into both sides
$sitefinity-comm-mcp generate-key

Then register the plugin in Global.asax, paste the key into Advanced Settings, and point your MCP client at a sitefinity-mcp.json listing your environments. The README has every step.

// also-in-the-repo

18 Sitefinity skills for your agent.

The tools let an agent look at a site. The skills teach it how Sitefinity works: widget designers, page surgery, the database schema, binding redirect errors. They follow the Agent Skills standard and install into Claude Code, Codex, Cursor and GitHub Copilot.

sitefinity-widget-expertsitefinity-page-surgerysitefinity-binding-doctorsitefinity-dynamic-content-sqlsitefinity-poco-generator
$npx skills add github:sitefinitysteve/SitefinityCommunity.Mcp --skill "*" -g -y
// assembly-scanner.md

Sitefinity Assembly Scanner.

Makes every Sitefinity build about 5 seconds faster. Feather's built-in widget scan loads every DLL in bin into a CLR just to read two attributes. This native executable reads the same metadata directly, with byte-identical output.

RustNuGetMSBuild360 KBzero config
msbuild.log
ScanControllerContainerAssemblies.ps1~5,000 ms
SitefinityAssemblyScanner.exe~40 ms

// ~125x faster, byte-identical output

package manager console
PM>Install-Package SitefinityAssemblyScanner

That is the whole install. The package ships an MSBuild targets file that points Sitefinity's build step at the executable. No PowerShell, no .NET runtime on build agents, nothing to add to your .csproj.

// sitefinity-widgets.md

Sitefinity widgets.

Production-ready, drag-and-drop widgets for the Sitefinity page editor. RandomSiteControls is the de-facto open source extension pack for the platform.

C# / .NETSitefinity6+ widgets

Tabstrip

Drag-and-drop widgets into a native Bootstrap or Kendo tabstrip. The only tabstrip component for Sitefinity that allows hosting any content.

Html Content Block

Enter content in a full-screen instance of VSCode in the browser, with intellisense and syntax highlighting. No content parsing, this thing is fast.

Markdown Editor

Enter content as markdown with a live preview. Cleaner than wysiwyg editors that bloat markup.

Page Title

Drop on the top of a page to pull in the title automatically, or edit to change. Template is global so you can restyle site-wide without editing 1000 content blocks.

Google Maps

Drag-and-drop Google Maps widget, with just about every option configurable in the designer.

Widget Finder

Find which pages contain which widgets, including layouts. Search across the entire site.

SitefinityExtensions.cs

Plus a pile of extension methods.

Helpers like .GetTags(), .GetImage(), .Live(), .Master() and many more, to keep your Sitefinity code short and readable.

// content extensions
var tags  = content.GetTags();
var image = content.GetImage();
var live  = content.Live();
// query extensions
var master    = query.Master();
var published = query.Published();
var visible   = query.Visible();
// servicestack-templates.md

ServiceStack templates.

The fastest way to create custom Sitefinity services. Skip MVC JsonResults and Webforms svc calls. ServiceStack is fully licensed by Sitefinity.

C# / .NETServiceStackCodeRush
ServiceStack.cs
Loading code template...

Plain C# template: a basic structure for creating ServiceStack API endpoints in Sitefinity, with dependency injection and service registration ready to go.

ServiceStackTemplate.cs
Loading code template...

CodeRush template: quickly generate ServiceStack endpoints with proper error handling and documentation.

Download CodeRush
// for any vue, react or php app Vue React PHP
// big-calendar.md

Big Calendar, for Vue and React.

A shadcn calendar with month, week, day, year and agenda views, event editing, user filters and working hours. It ships as two packages with the same props, the same events and the same right-click menus, so the table below is the entire difference between them.

Both descend from Leonardo Ramos's big-calendar for Next.js.

Vue 3.5+React 19TypeScriptTailwind v4date-fns 4MIT
big-calendar-vue3.netlify.app/month-view

// the demo runs big-calendar-vue3. big-calendar-react renders the same UI.

// one api, two frameworks
How big-calendar-vue3 and big-calendar-react differ
Concern big-calendar-vue3 big-calendar-react
RequiresVue 3.5+React 19
StorePiniaZustand
Primitivesshadcn-vue, Reka UIshadcn/ui, Base UI
FormsVeeValidate + zodreact-hook-form + zod
Active viewv-model:view="view"view, onViewChange
Event saved@event-updatedonEventUpdated
Menu command@commandonCommand
Calendar.vue
# peers you may not have yet: date-fns and the form stack
$ npm install big-calendar-vue3 date-fns@4 vee-validate @vee-validate/zod zod@3

<script setup lang="ts">
import { BigCalendar, useCalendarStore } from 'big-calendar-vue3'
import 'big-calendar-vue3/style.css'

const view = ref<TCalendarView>('month')
useCalendarStore().initialize(users, events)
</script>

<BigCalendar
  v-model:view="view"
  @event-created="save"
  @event-updated="save"
/>
// in both packages

Edits update the local store first, then fire an event with the changed item, so persisting is one handler that calls your API.

Not yet: drag-and-drop to move events.

  • Create, edit and delete events, with validated forms
  • Filter the calendar by user
  • Working hours per weekday, with off-hours shaded
  • Visible hour range that widens for events outside it
  • Live current-time line in week and day views
  • Multi-day events that span cells
  • Every label overridable, dates localized through date-fns
  • Right-click command menus on events and days
  • Dark mode
  • Mobile fallbacks for the dense views
// diff-text.md

diff-text.

Shows what changed between two versions of a piece of writing. Compare by character, word, sentence or line, or diff rich HTML and get valid markup back. Long documents get unified and side-by-side views with line numbers, plus a badge with a similarity score.

Built for policies, articles and CMS content. For code review, use a code diff viewer.

Vue 3React 18 and 19PHP 8.1+jsdiff bundledMIT
sitefinitysteve.github.io/diff-text/vue/

// switch runtimes above. Same page, rendered by the Vue package.

Compare.vue
$ npm install vue-diff-text

<script setup>
import { DiffWords } from 'vue-diff-text'
import 'vue-diff-text/dist/style.css'
</script>

<DiffWords :old-text="before" :new-text="after" />
// how parity is kept

One SPEC.md defines the tokenizers, the Myers diff variant and the exact markup for every view. A TypeScript reference implementation turns it into JSON fixtures, and all three test suites render every fixture and compare the output byte for byte. CI fails if the fixtures drift.

The payoff: one stylesheet themes all three, and a page that diffs on the server in PHP looks identical to one that diffs in the browser.

DiffCharsDiffWordsDiffWordsWithSpaceDiffSentencesDiffLinesDiffHtmlDiffUnifiedDiffSplitDiffStats
/html>