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.exeligger 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
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
.exefor 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:
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:
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:
Gruppepolitik
Computerkonfiguration → Administrative skabeloner → Windows-komponenter → Microsoft Defender Antivirus → Microsoft Defender Exploit Guard → Attack Surface Reduction → "Exclude files and paths from ASR Rules":
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-MpPreferenceviser 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:
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.