Skip to content

KeyBalance MCP - teknisk

Teknisk beskrivelse af MCP-komponenten, fejlsøgning når den blokeres af Windows, og den dokumentation kundens it-afdeling har brug for. Brugervejledningen ligger i KeyBalance MCP.

Arkitektur

MCP-forbindelsen består af tre led på samme pc:

Claude Desktop  →  Keybalance.McpProxy.exe  →  KeyBalance-klienten  →  KB Backend
   (AI-klient)         (lokal bro)              (brugerens session)
  • Keybalance.McpProxy.exe ligger i firmaets egen installationsmappe under %LOCALAPPDATA%\Keybalance\<FIRMA>\ og leveres med klienten via ClientUpdate. Der skal ikke installeres noget separat.
  • Claude Desktop starter komponenten som underproces og taler med den over stdin/stdout. Den kører kun, mens Claude er åben.
  • Komponenten kører i brugerens egen kontekst uden rettighedsforhøjelse. Den installerer ingen tjeneste og starter ikke med Windows.
  • Al dataadgang går gennem den KeyBalance-klient, brugeren allerede er logget ind i. Der oprettes ingen selvstændig session og intet selvstændigt login.

Argumenter

Keybalance.McpProxy.exe <FIRMA> <REGNSKAB>

Andet argument er regnskabets mappenavn, ikke et frit valgt navn. Et firma kan have flere - fx Regnskab, regnKLHold og regnKLOK under samme installation. Casing skal matche mappen. Der skal sættes én forbindelse op per regnskab.

Rettighedsstyring

Den værktøjsliste, komponenten udstiller, afhænger af den indloggede brugers rettigheder i KeyBalance. Brugere uden designrettigheder får ikke adgang til PTD-ressourcerne, og listen bliver tilsvarende kortere.

Et lavere antal værktøjer end forventet er et rettighedsspor - ikke en fejl i opsætningen. Kontrollér brugerens rolle, før du fejlsøger konfigurationen.


Version og signatur

Fra og med version 2608F er Keybalance.McpProxy.exe digitalt signeret af KeyBalance A/S. Det er afgørende for fejlsøgningen: langt de fleste blokeringsproblemer skyldes, at maskinen kører en ældre, usigneret version.

Tjek altid dette først:

Get-AuthenticodeSignature "$env:LOCALAPPDATA\Keybalance\TNSLIB\Keybalance.McpProxy.exe" |
  Select-Object Status, @{n='Udsteder';e={$_.SignerCertificate.Subject}}
Resultat Betydning Handling
Valid + CN=KeyBalance A/S 2608F eller nyere Signaturen er på plads - fejlen ligger et andet sted
NotSigned Ældre end 2608F Opdatér klienten. Det er løsningen
HashMismatch / NotTrusted Filen er ændret, eller certifikatkæden mangler Kontakt KeyBalance support

Er den usigneret, så lad ClientUpdate bringe installationen frem til 2608F eller nyere. Det løser problemet permanent og for alle brugere på maskinen.

Undgå at pege MCP-opsætningen over på en anden mappes .exe for at komme uden om en gammel version. Komponenten finder sin klientinstallation ud fra sin egen placering, så den vil forbinde til det forkerte regnskab.


Blokeret af Windows

Blokeringer sker uden fejlbesked i Claude. MCP-serveren dukker bare ikke op, og der står intet i programmet om hvorfor. Starter man derimod komponenten manuelt fra en terminal, får man "Adgang nægtet".

Brugeren kan møde en af disse beskeder:

  • "Du har ikke tilladelse til at åbne denne fil. Du kan få tilladelse fra ejeren af filen eller fra en administrator."
  • "Dette indhold er blokeret. Din administrator giver dig ikke mulighed for at få adgang til indhold fra ...\Keybalance.McpProxy.exe, for at beskytte din computer."

Trin 1 - Find ud af hvad der blokerer

Kør på den berørte maskine:

# A) Virusmotoren - har den sat filen i karantæne?
Get-MpThreatDetection | Sort-Object InitialDetectionTime -Descending |
  Select-Object -First 5 InitialDetectionTime, ThreatID, Resources | Format-List

# B) Exploit Guard / ASR - langt den hyppigste årsag
Get-WinEvent -FilterHashtable @{
    LogName = 'Microsoft-Windows-Windows Defender/Operational'
    Id      = 1121
  } -MaxEvents 200 -ErrorAction SilentlyContinue |
  Where-Object Message -match 'McpProxy' |
  Select-Object TimeCreated, Message | Format-List

# C) Smart App Control (0=fra 1=til 2=evaluering)
(Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\CI\Policy' -Name VerifiedAndReputablePolicyState -EA SilentlyContinue).VerifiedAndReputablePolicyState

# D) WDAC / AppLocker
Get-WinEvent -LogName 'Microsoft-Windows-CodeIntegrity/Operational' -MaxEvents 20 -EA SilentlyContinue |
  Where-Object Message -match 'Keybalance'

Tolkning:

Fund Årsag Løsning
Poster i A Defender Antivirus Tillad i Beskyttelseshistorik, og tilføj antivirus-undtagelse
Poster i B ASR-regel Se trin 2 nedenfor
C returnerer 1 Smart App Control Kræver signeret fil - opdatér til 2608F
Poster i D WDAC eller AppLocker Politikundtagelse hos kundens it-afdeling
Intet fund Ikke en blokering Se "Anden fejlsøgning" nederst

Trin 2 - ASR-reglen

Er det ASR, viser hændelse 1121 denne regel:

Id: 01443614-CD74-433A-B99E-2ECDC07BFC25

Det er reglen "Block executable files from running unless they meet a prevalence, age, or trusted list criterion". Den afviser eksekverbare filer, der ikke er tilstrækkeligt udbredte.

Feltet Procesnavn i hændelsen varierer - claude.exe, explorer.exe, cmd.exe. Det er forventet: reglen vurderer filen, ikke den kaldende proces. Det er altså ikke Claude, der er problemet.

Hvorfor problemet ikke går over af sig selv på en usigneret version: reglen måler udbredelse pr. filhash. Klienten opdateres løbende, og hver opdatering giver komponenten en ny hash, der starter forfra på nul udbredelse. Filen når derfor aldrig reglens tærskel, uanset hvor længe man venter.

Løsningen er at opdatere til 2608F. Signaturen giver komponenten en udgiveridentitet, som omdømmet kan samle sig på, i stedet for at blive nulstillet ved hver opdatering.

Trin 3 - ASR-undtagelse, hvis det stadig blokeres

Er klienten på 2608F eller nyere, og bliver komponenten fortsat afvist, skal der en undtagelse til. Nogle organisationer kører reglen så stramt, at også signerede filer med lav udbredelse afvises.

Undtagelsen skal sættes på sti, ikke på filhash, fordi komponenten opdateres sammen med klienten:

%LOCALAPPDATA%\Keybalance\*\Keybalance.McpProxy.exe

Wildcard i midten er nødvendigt, fordi hvert firma har sin egen undermappe.

Intune (anbefalet, hvis I styrer Defender centralt)

Endpoint security → Attack surface reduction → jeres ASR-profil → Attack Surface Reduction Only Exclusions → Add:

%LOCALAPPDATA%\Keybalance\*\Keybalance.McpProxy.exe

Gruppepolitik

Computerkonfiguration → Administrative skabeloner → Windows-komponenter → Microsoft Defender Antivirus → Microsoft Defender Exploit Guard → Attack Surface Reduction → "Exclude files and paths from ASR Rules":

Værdinavn: %LOCALAPPDATA%\Keybalance\*\Keybalance.McpProxy.exe
Værdi:     0

PowerShell (kun uden central politikstyring - kræver lokal administrator)

Add-MpPreference -AttackSurfaceReductionOnlyExclusions "%LOCALAPPDATA%\Keybalance\*\Keybalance.McpProxy.exe"

Almindelig faldgrube: en almindelig antivirus-undtagelse (-ExclusionPath, eller "Udelukkelser" i Windows Sikkerhed) er ikke tilstrækkelig. ASR-undtagelser er en selvstændig liste.

Er ASR-reglen udrullet fra Intune eller GPO, skal undtagelsen samme vej. En lokal ændring bliver ignoreret eller overskrevet ved næste policy-synkronisering. Det ses på, at Get-MpPreference viser en tom regelliste, selvom reglen tydeligvis håndhæves.

Trin 4 - Verificér

# Er undtagelsen nået frem? (kræver administrator)
(Get-MpPreference).AttackSurfaceReductionOnlyExclusions

# Starter komponenten nu?
# Forventet: den starter og venter på input. Afslut med Ctrl+C.
& "$env:LOCALAPPDATA\Keybalance\TNSLIB\Keybalance.McpProxy.exe" TNSLIB Regnskab

Bed derefter brugeren lukke Claude Desktop helt ned - også fra systembakken - og starte igen.

Midlertidig adgang

Skal brugeren i gang, før politikken kan ændres, kan de trykke Fjern blokering i Windows Sikkerheds notifikation, eller finde hændelsen under Virus- og trusselsbeskyttelse → Beskyttelseshistorik og tillade den derfra.

Tilladelsen er tidsbegrænset og bortfalder desuden ved næste opdatering af klienten, fordi komponenten da har en ny filhash. Det er en nødløsning, ikke en driftsløsning.


Til kundens it-afdeling

Bliver I bedt om at godkende en undtagelse, er her grundlaget for vurderingen.

Forhold Status Bemærkning
Oprindelse KeyBalance A/S Del af KeyBalance-installationen, udrullet via ClientUpdate
Digital signatur Signeret fra 2608F CN=KeyBalance A/S, O=KeyBalance A/S, L=Bagsværd, C=DK
Kører som Almindelig bruger Ingen rettighedsforhøjelse, ingen tjeneste, ingen autostart
Startes af Claude Desktop Som underproces, kun mens brugeren har Claude åben
Kommunikation stdin/stdout Taler med den KeyBalance-klient, brugeren allerede har åben
Dataadgang Brugerens egen Kan ikke tilgå mere, end brugeren selv har rettigheder til i KeyBalance

Undtagelsen i trin 3 omfatter én navngiven eksekverbar fil i brugerens egen profil. Den åbner ikke mappen, ikke filtypen og ikke andre komponenter.

Er I i tvivl om vurderingen, eller ønsker I undtagelsen afgrænset yderligere, er I velkomne til at kontakte KeyBalance support.


Anden fejlsøgning

Værktøjslisten er tom

Komponenten svarer, men udstiller ingen værktøjer. Det betyder, at KeyBalance-klienten ikke kører på det pågældende firma og regnskab - ikke at opsætningen er forkert. Broen er tolerant og forbinder af sig selv, når klienten åbnes.

Kontrollér at brugeren er logget ind på præcis det regnskab, der står i args.

Færre værktøjer end på en anden maskine

Rettigheder, ikke opsætning. Se afsnittet om rettighedsstyring ovenfor.

Forkert regnskab

Andet argument skal matche regnskabsmappens navn nøjagtigt, med samme store og små bogstaver. Kontrollér med:

Get-ChildItem "$env:LOCALAPPDATA\Keybalance\TNSLIB" -Directory | Select-Object Name

Søgninger med æ, ø og å giver nul resultater

På enkelte ældre versioner afkodes danske tegn forkert på vej ind i komponenten, så en søgning på fx Ø ikke rammer noget. Fejlen er tavs - man får nul rækker frem for en fejlbesked, hvilket læses som "der er ingen data" i stedet for "søgningen kom aldrig frem".

Test det sådan: søg i finanskontoplanen på et kontonavn, der indeholder Ø, og som du ved findes. Kommer der rækker, er alt i orden. Kommer der nul, er versionen ramt, og klienten skal opdateres.

Smoke-test af en ny opsætning

Opsætningen kan testes uden at starte Claude:

$exe = "$env:LOCALAPPDATA\Keybalance\TNSLIB\Keybalance.McpProxy.exe"
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1"}}}' | & $exe TNSLIB Regnskab

Svarer den med serverInfo og navnet keybalance-mcp-proxy, er komponenten sund. Værktøjer dukker først op, når KeyBalance-klienten er åben på regnskabet.


Claude Code

Bruger man Claude Code i stedet for Claude Desktop, er princippet det samme, men opsætningsfilen er en anden: serverne står under mcpServers i %USERPROFILE%\.claude.json. Formatet er identisk, blot med "type": "stdio" tilføjet på hver server.

"keybalance-tnslib": {
  "type": "stdio",
  "command": "C:\\Users\\<BRUGER>\\AppData\\Local\\Keybalance\\TNSLIB\\Keybalance.McpProxy.exe",
  "args": ["TNSLIB", "Regnskab"],
  "env": {}
}