Skip to content

Repository files navigation

nlp2env

AI Cost Tracking

PyPIVersionPythonLicenseAI CostHuman TimeModel

  • 🤖 LLM usage: $0.7981 (7 commits)
  • 👤 Human dev: ~$766 (7.7h @ $100/h, 30min dedup)

Generated on 2026-07-06 using openrouter/qwen/qwen3-coder-next


MCP server do odczytu i zapisu pliku .env — w tym profilu SMTP/email dla workflow send_email (nlp2dsl-worker).

Instalacja

cd~/github/semcod/nlp2env
pip install -e ".[mcp]"

Uruchomienie MCP

export NLP2ENV_ENV_FILE=~/github/wronai/todomat/.env # opcjonalnie
nlp2env-mcp

Narzędzia MCP

ToolOpis
nlp2env_interfacesMetadane, ścieżka .env, profile
nlp2env_listLista kluczy (sekrety zamaskowane)
nlp2env_getOdczyt kluczy (comma-separated)
nlp2env_setZapis z JSON {"SMTP_HOST":"..."}
nlp2env_set_emailZapis profilu SMTP (host, user, password, …)
nlp2env_apply_textParsuj bloki KEY=value z tekstu
nlp2env_deleteUsuń klucze (comma-separated) z .env
nlp2env_backupKopia .env.nlp2env/backups/
nlp2env_email_statusCzy SMTP jest kompletny
nlp2env_set_apiZapis kluczy API (OpenAI, Anthropic, Groq, HF)
nlp2env_api_statusCzy jakieś klucze API są skonfigurowane
nlp2env_set_dbZapis profilu bazy danych (Postgres, Redis, Mongo)
nlp2env_db_statusCzy profil bazy danych jest kompletny
nlp2env_generate_keyGeneruj nowy klucz szyfrowania Fernet
nlp2env_encryptSzyfruj plaintext → enc:<base64>
nlp2env_decryptOdszyfruj enc:<base64> → plaintext
nlp2env_load_multiPołącz .env + .env.{suffix} (override wins)
nlp2env_list_filesLista plików .env* w katalogu projektu

Profil email (nlp2dsl)

Klucze zgodne z nlp2dsl worker:

SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD, SMTP_TLS, SMTP_FROM, SMTP_TIMEOUT

Po zapisie zrestartuj worker:

docker compose -f ~/github/wronai/nlp2dsl/docker-compose.yml restart worker

Profil API keys

Klucze LLM/API zapisywane przez nlp2env_set_api:

OPENAI_API_KEY, ANTHROPIC_API_KEY, GROQ_API_KEY, HUGGINGFACE_API_TOKEN

Profil database

Klucze PostgreSQL, Redis i MongoDB zapisywane przez nlp2env_set_db:

POSTGRES_HOST, POSTGRES_PORT, POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD
REDIS_URL, REDIS_HOST, REDIS_PORT
MONGO_URI

nlp2env_db_status sprawdza czy PostgreSQL jest kompletny (host, db, user, password) oraz czy Redis/Mongo są skonfigurowane.

Wiele .env (suffix)

resolve_env_path obsługuje suffix — automatycznie wybiera .env.local, .env.production:

# env_file.py
resolve_env_path(suffix="local") # → ./.env.local
resolve_env_path(suffix="production") # → ./.env.production

MCP tool nlp2env_load_multi ładuje base .env a potem overlay .env.{suffix} (override nadpisuje base):

# .env
SMTP_HOST=prod.server.com
SMTP_PORT=587
# .env.local
SMTP_HOST=localhost
SMTP_PORT=2525

nlp2env_load_multi(suffix="local")SMTP_HOST=localhost, SMTP_PORT=2525

Cursor (mcp.json)

{
"mcpServers": {
"nlp2env": {
"command": "nlp2env-mcp",
"env": {
"NLP2ENV_ENV_FILE": "/home/tom/github/wronai/todomat/.env"
}
}
}
}

uri2env

Pakiet uri2env (w src/uri2env/) mapuje URI env:// na plik .env — używany przez nlp2uri do adresowania konfiguracji:

pip install -e ".[mcp,nlp2uri]"
uri2env materialize --uri 'env://nlp2env/smtp?dest=./.env'

W nlp2uri: resolve_env()env://…materialize_env().

Walidacja formatów

nlp2env_set i nlp2env_set_email automatycznie walidują wartości:

FormatKlucze (suffix/prefix)Przykład poprawny
Email_EMAIL, _USERjan@firma.pl
Host/IP_HOST, SERVER, ADDRESSsmtp.gmail.com, 192.168.1.1
Port_PORT, _TIMEOUT587, 30
URL_URLhttps://api.example.com
Bool_TLS, _ENABLED1, true, yes, on
API key_API_KEY, _TOKENsk-..., gsk-..., hf_...

Błędy walidacji zatrzymują zapis i zwracają validation_errors w odpowiedzi MCP.

Szyfrowanie wartości

Wartości w .env mogą być szyfrowane AES-128-CBC + HMAC (Fernet):

# Generuj klucznlp2env_generate_key() # → zapisz do ~/.nlp2env/key lub NLP2ENV_MASTER_KEY# Szyfruj
nlp2env_encrypt("sekret123") # → "enc:gAAAAAB..."# Zapisz zaszyfrowane do .env
nlp2env_set('{"API_KEY": "enc:gAAAAAB..."}')
# Odszyfruj (automatycznie przy odczycie przez MCP)
nlp2env_decrypt("enc:gAAAAAB...") # → "sekret123"

Klucz — 32 bajty base64 (44 znaki), generowany przez generate_key() lub hasło przez _derive_key().

Maskowanie — zaszyfrowane wartości wyświetlane jako enc:****wxyz.

Testy

pip install -e ".[dev]"
pytest
make examples # szybkie e2e
make examples-multilang # 26 promptów LLM/Ollama (16 języków)
make examples-all # oba

prompts-multilang.txt (examples/write/smtp-email/) — 26 wielojęzycznych promptów NL testujących ścieżkę LLM → MCP → .env; uruchamiane przez make examples-multilang. Opis: examples/write/smtp-email/README.md.

Przykłady NL → .env (Docker + README): examples/README.md.

License

Licensed under Apache-2.0.

About

MCP server for reading and writing .env variables (email/SMTP and custom keys)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages