Skip to main content
Glama
marekwee

Visual FoxPro MCP per Gitea (Windows)

by marekwee

Visual FoxPro MCP per Gitea (Windows)

MCP separato dal server Gitea: espone get_vfp_file_contents, legge file da Gitea via REST API, converte i binari con FoxBin2Prg in una cartella temporanea e restituisce testo paginato. Non effettua commit, push né scritture nel repository.

Prerequisiti

  • Windows e Python >=3.11.

  • FoxBin2Prg.exe funzionante, compilato/distribuito per la tua versione Visual FoxPro, con _FileName_Caps.exe e runtime necessari installati. Scarica il pacchetto compilato/distribuito appropriato; il clone del codice sorgente potrebbe non contenere già l'EXE compilato.

  • Un account Gitea con un token limitato ai repository necessari e ai soli permessi di lettura.

Related MCP server: MCP-Local

Installazione (PowerShell)

cd C:\vfp-gitea-mcp
py -3.11 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
Copy-Item .env.example .env
notepad .env
.\.venv\Scripts\python.exe -m unittest discover -s tests -v

Modifica .env con URL Gitea, token, percorso effettivo dell'eseguibile e repository consentiti. Usa in GITEA_URL la radice del server, eventualmente con il prefisso applicativo, non aggiungere /api/v1. Per un server interno con HTTPS devi avere un certificato CA attendibile in Windows/Python; non disabilitare la verifica TLS.

Configurazione di FoxBin2Prg

FoxBin2Prg accetta FoxBin2Prg.exe "C:\path\file.scx" BIN2PRG. Configura il FoxBin2Prg.cfg accanto all'EXE per evitare finestre/modali:

ShowProgressbar: 0
DontShowErrors: 1
ExtraBackupLevels: 0
OptimizeByFilestamp: 0
UseClassPerFile: 0

Integra queste opzioni nel tuo CFG anziché sovrascrivere tutto: altre opzioni, in particolare UseClassPerFile ed estensioni di output, possono cambiare il nome del file generato. L'implementazione cerca il default form.sc2, class.vc2, etc. Se hai output personalizzati, modifica BINARIES/convert_file.

Prova prima manualmente in PowerShell su una COPIA di una coppia reale clienti.scx + clienti.sct nella stessa directory:

& 'C:\Tools\FoxBin2Prg\FoxBin2Prg.exe' 'C:\Temp\VFPTEST\clienti.scx' 'BIN2PRG'
$LASTEXITCODE
Get-Content 'C:\Temp\VFPTEST\clienti.sc2' -TotalCount 15

Non inserire FoxBin2Prg.exe nel repository MCP e non distribuire il runtime VFP senza verificarne le licenze.

Avvio

Nel client MCP che già usa Gitea, aggiungi un secondo server seguendo mcp-client-example.json, correggendo i due percorsi assoluti. Il server usa stdio: è avviato automaticamente dal client MCP, senza porta HTTP.

Per ispezionare il tool con MCP Inspector (richiede Node.js / npx):

.\.venv\Scripts\mcp.exe dev server.py

python server.py senza client resta in ascolto su stdin: non è un blocco. Non scrivere messaggi su stdout quando funziona in stdio.

Esempio di tool

get_vfp_file_contents(owner="azienda", repo="gestionale-vfp", path="forms/clienti.scx", ref="main", start_line=1, max_lines=200)

Risposta (schema sintetico):

{
  "owner": "azienda", "repo": "gestionale-vfp",
  "path": "forms/clienti.scx", "ref": "main",
  "converted_to": "clienti.sc2",
  "source_files": ["forms/clienti.scx", "forms/clienti.sct"],
  "encoding_fallback": "cp1252",
  "total_lines": 1240, "start_line": 1, "returned_lines": 200,
  "next_start_line": 201, "text": "..."
}

Il valore ref può indicare una branch, un tag o uno SHA. Per garantire che tutti i file della coppia siano della stessa revisione, usa uno SHA quando possibile: se la branch cambia esattamente fra le due richieste, potrebbero esserci contenuti di commit diversi.

Cosa gestisce

  • Binari .scx/.sct, .vcx/.vct, .frx/.frt, .lbx/.lbt, .mnx/.mnt, .pjx/.pjt, .dbc/.dct, .dbf con .fpt facoltativo, .mem, .fky.

  • Testo .prg, .h, .qpr, .mpr, .spr, .sql, .txt, .ini, .cfg, .xml, .json e le estensioni testuali FoxBin2Prg.

  • Limiti: 12 MiB/file, 24 MiB richieste totali, 30 MiB output, timeout 45 secondi, paginazione 1-1000 righe/chiamata, cartella temporanea cancellata sempre.

  • Codifica: prova prima UTF-8 e poi VFP_ENCODING (di default cp1252); per applicazioni che utilizzano DOS/OEM configura ad esempio cp850.

Limiti importanti

  • .PJX è convertito come singolo file: il server non importa automaticamente gli altri file citati dal progetto. Non usare la modalità batch * di FoxBin2Prg.

  • Il repository Gitea distingue maiuscole/minuscole. Per i file memo si provano la capitalizzazione corrispondente, quella minuscola e quella maiuscola.

  • I redirect HTTP da Gitea vengono rifiutati per non inoltrare il token a host terzi.

  • Attenzione ai file memorizzati in Git LFS: l'endpoint /raw non sostituisce automaticamente il download del contenuto LFS; se usi LFS, adatta il lettore verso /media per la tua versione Gitea.

  • Usalo con un token Gitea di sola lettura e VFP_ALLOWED_REPOS (obbligatorio), meglio se con un account isolato. Non aggiungere strumenti di scrittura.

Dove modificare

  1. vfp_core.py / BINARIES e memo_candidates: aggiungere formati e file memo.

  2. vfp_core.py / GiteaReader.read: cambiare la modalità di accesso a Gitea.

  3. vfp_core.py / convert_file: modificare le opzioni del convertitore.

  4. vfp_core.py / read_vfp: cambiare formato della risposta, limiti e paginazione.

  5. server.py: registrare nuovi @mcp.tool().

Fonti ufficiali:

License

This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). See the LICENSE file for details.

Copyright (C) 2026 Marek K. Wierzba (marek.wierzba@gmail.com)

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides AI agents with secure, read-only file system access to analyze and understand project codebases, enabling multi-repository context aggregation and cross-project code tracing.
    29 PyPI
    5
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables secure, read-only access to text and code files inside user-configured local folders on Windows, with directory listing, file reading, and text search capabilities.
    Apache 2.0
  • A
    license
    A
    quality
    B
    maintenance
    Provides read-only access to a local mirror of a chosen code project, letting ChatGPT list projects, page through file inventories, read UTF-8 source by line range, run literal code searches, and diff the current snapshot against the previous one. Runs as a local stdio process or a Bearer-token-protected Streamable HTTP endpoint, with no model API keys required and no write operations exposed.
    5
    3
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables cross-repository code search over a local mirror of a self-hosted Gitea or Forgejo instance, covering file contents, file paths, and commit messages across all repositories and branches. It also lets users read a single file from the mirror and list mirrored repositories, all without network access during search or read.
    123 npm
    7
    Apache 2.0