Skip to main content

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

Project description

nlp2env

AI Cost Tracking

PyPI Version Python License AI Cost Human Time Model

  • 🤖 LLM usage: $0.6993 (4 commits)
  • 👤 Human dev: ~$516 (5.2h @ $100/h, 30min dedup)

Generated on 2026-06-08 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

Tool Opis
nlp2env_interfaces Metadane, ścieżka .env, profile
nlp2env_list Lista kluczy (sekrety zamaskowane)
nlp2env_get Odczyt kluczy (comma-separated)
nlp2env_set Zapis z JSON {"SMTP_HOST":"..."}
nlp2env_set_email Zapis profilu SMTP (host, user, password, …)
nlp2env_apply_text Parsuj bloki KEY=value z tekstu
nlp2env_delete Usuń klucze (comma-separated) z .env
nlp2env_backup Kopia .env.nlp2env/backups/
nlp2env_email_status Czy SMTP jest kompletny
nlp2env_set_api Zapis kluczy API (OpenAI, Anthropic, Groq, HF)
nlp2env_api_status Czy jakieś klucze API są skonfigurowane
nlp2env_set_db Zapis profilu bazy danych (Postgres, Redis, Mongo)
nlp2env_db_status Czy profil bazy danych jest kompletny
nlp2env_generate_key Generuj nowy klucz szyfrowania Fernet
nlp2env_encrypt Szyfruj plaintext → enc:<base64>
nlp2env_decrypt Odszyfruj enc:<base64> → plaintext
nlp2env_load_multi Połącz .env + .env.{suffix} (override wins)
nlp2env_list_files Lista 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:

Format Klucze (suffix/prefix) Przykład poprawny
Email _EMAIL, _USER jan@firma.pl
Host/IP _HOST, SERVER, ADDRESS smtp.gmail.com, 192.168.1.1
Port _PORT, _TIMEOUT 587, 30
URL _URL https://api.example.com
Bool _TLS, _ENABLED 1, true, yes, on
API key _API_KEY, _TOKEN sk-..., 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 klucz
nlp2env_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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nlp2env-0.1.4.tar.gz (30.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nlp2env-0.1.4-py3-none-any.whl (27.3 kB view details)

Uploaded Python 3

File details

Details for the file nlp2env-0.1.4.tar.gz.

File metadata

  • Download URL: nlp2env-0.1.4.tar.gz
  • Upload date:
  • Size: 30.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for nlp2env-0.1.4.tar.gz
Algorithm Hash digest
SHA256 8edd3dbde3206005454853f56315de025803913a56ee318a31eb647ede6272ba
MD5 f186f434dd79ffe2a781e4987a142ab2
BLAKE2b-256 8e0a3ff48a61c9cd01b6fae572c2a15e6c1ba8097c6ee101a88fbc2af4045c9f

See more details on using hashes here.

File details

Details for the file nlp2env-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: nlp2env-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 27.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for nlp2env-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 ca2f3feb2209cc3e280eef1bb9374347028e85ac87c361c22a76710433a01709
MD5 6957c9c91945c8082f360baa74489578
BLAKE2b-256 955c50b059fca2427ba6a67471adce31c999c4f846e1298152da779623bac319

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page