Skip to content

Admin Settings

Manage runtime application configuration through the Admin Settings UI without restarting the application.

Admin Settings provides:

  • Runtime Configuration - Change settings without redeploying or restarting
  • LLM Provider Management - Configure and hot-swap AI providers at runtime
  • Change History - Full audit trail of all setting changes with user attribution
  • Encrypted Storage - Sensitive values (API keys, endpoints) encrypted in the database
  • Role-Restricted - Only Admin users can access settings
  1. Log in as an Admin user
  2. Navigate to Admin Settings in the navigation menu (/admin-settings)
  3. Configure settings across the available tabs
SettingDescriptionExample
Base URLApplication URL for notification linkshttps://yourdomain.com

The Base URL is used to generate clickable links in Teams/Slack notifications that take users to the Beacon UI (the React app is served at the root URL).

Configure the LLM provider for AI-powered features (documentation generation, natural language alerts).

SettingDescriptionRequired
ProviderLLM provider (OpenAI, Anthropic, AzureOpenAI, Bedrock)Yes
API KeyAuthentication key for the providerYes
EndpointCustom API endpoint URLNo
RegionAWS region (Bedrock only)Bedrock only
ModelPrimary model nameYes
Fast ModelLightweight model for quick operationsNo
Max Concurrent RequestsParallel request limitNo (default: 50)
Tokens Per MinuteRate limitNo (default: 80,000)
Requests Per MinuteRate limitNo (default: 1,000)
Monthly BudgetCost cap in USDNo (default: $100)

View a complete audit log of all settings changes:

  • Setting Key - Which setting was changed
  • Old Value / New Value - Previous and new values (masked for sensitive fields)
  • Changed By - User who made the change
  • Changed At - Timestamp

Admin Settings can change the LLM provider at runtime without restarting the application.

  1. Admin updates LLM settings via the UI
  2. AppSettingsService saves encrypted values to the database
  3. LlmProviderManager receives the update via ILlmConfigurationUpdater
  4. A new provider instance is created with the updated configuration
  5. DelegatingLlmProvider (the proxy injected throughout the app) automatically delegates to the new provider
  6. All subsequent AI requests use the new provider immediately
AppSettingsService.SaveSettingsAsync()
├── Save to database (encrypted)
├── Invalidate cache
├── Update BeaconConfiguration singleton
└── ILlmConfigurationUpdater.UpdateConfiguration()
└── LlmProviderManager
├── Mutate LlmConfiguration singleton
└── Recreate ILlmProvider via factory
└── DelegatingLlmProvider (proxy)
└── All consumers use new provider

Example: Switching from OpenAI to Anthropic

Section titled “Example: Switching from OpenAI to Anthropic”
  1. Go to Admin Settings > AI Configuration
  2. Change Provider to Anthropic
  3. Update API Key to your Anthropic key
  4. Change Model to claude-3-5-sonnet-20241022
  5. Click Save
  6. AI features immediately use Anthropic — no restart needed

Settings can be pre-configured in two ways.

{
"Beacon": {
"BaseUrl": "https://yourdomain.com",
"LLM": {
"Provider": "OpenAI",
"ApiKey": "sk-your-api-key",
"Model": "gpt-4o"
}
}
}

On startup, if Admin Settings in the database are empty, values from appsettings.json are used as defaults. Once saved via the Admin Settings UI, database values take precedence.

After creating the super admin during first-run setup, navigate to Admin Settings to configure the LLM provider and other settings.

Settings are stored in two tables.

ColumnTypeDescription
keystringSetting identifier (e.g., LLM.ApiKey)
valuestring?Setting value (encrypted if sensitive)
categorystringGrouping (General, LLM)
is_sensitiveboolIf true, value is encrypted
ColumnTypeDescription
setting_keystringWhich setting changed
old_valuestring?Previous value (*** if sensitive)
new_valuestring?New value (*** if sensitive)
changed_atDateTimeWhen the change occurred
changed_by_user_idstring?Who made the change
public class MyService
{
private readonly IAppSettingsService _settingsService;
public MyService(IAppSettingsService settingsService)
{
_settingsService = settingsService;
}
public async Task DoSomethingAsync()
{
var settings = await _settingsService.GetSettingsAsync();
var baseUrl = settings.BaseUrl;
var llmProvider = settings.LlmProvider;
var llmModel = settings.LlmModel;
}
}
var settings = await _settingsService.GetSettingsAsync();
settings.BaseUrl = "https://new-domain.com";
await _settingsService.SaveSettingsAsync(settings, userId: currentUser.Id);
var history = await _settingsService.GetHistoryAsync();
// Filter by setting key
var llmHistory = await _settingsService.GetHistoryAsync(key: "LLM.ApiKey");

If you build custom services that need to react to LLM configuration changes, implement ILlmConfigurationUpdater:

public interface ILlmConfigurationUpdater
{
void UpdateConfiguration(AppSettingsData settings);
}

This interface lives in Beacon.Core so that AppSettingsService can call it without depending on Beacon.AI. The implementation (LlmProviderManager) lives in the AI project.

Settings are cached in memory for 1 hour to minimize database queries. The cache is invalidated immediately when settings are saved via the Admin Settings UI.

MCP server behavior has its own admin page at /mcp-settings, organised into four tabs — Pre-prompt (SQL-generation system prompt, global instruction), Tool descriptions (overrides applied to the live tools/list response), Guardrails (max row limit, read-only enforcement, PII detection with custom patterns, and the learning knobs), and Context preview (see the grounding context for a project exactly as the tools assemble it).

See the MCP Server Guide for details. Additional retrieval, exemplar, and eval settings that aren’t on this page are settable through PUT /beacon/api/mcp/settings — see the Knowledge Base guide. Like LLM settings, MCP settings apply immediately — no restart required.