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.7961 (5 commits)
  • 👤 Human dev: ~$566 (5.7h @ $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.5.tar.gz (30.0 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.5-py3-none-any.whl (27.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: nlp2env-0.1.5.tar.gz
  • Upload date:
  • Size: 30.0 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.5.tar.gz
Algorithm Hash digest
SHA256 7750fd8f9aa8a0e632b14fa8bc01da8bee5c0f15e425b3dadd5fa8b550bd4373
MD5 f84a194d6bf2164dadef6a36369c3a23
BLAKE2b-256 fce734b0281335687826446bc28ac373187fb3bf26502ef56dca5e47a26b417a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: nlp2env-0.1.5-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.5-py3-none-any.whl
Algorithm Hash digest
SHA256 21cc29998af4ac3da62123e9360d0c9cfe4eb0fda33f074b55bca1202f1119ca
MD5 b6aea542a4b2e2874442ff2a39d24b7d
BLAKE2b-256 aaf3e9560b03371f7a1d9ede719fc7faa5bf9c30654494b64c798f263b2b2216

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