Skip to main content
Glama

env_generate

Generate .env file content from project manifest, resolving secrets from q-ring vault and warning about missing or expired credentials.

Instructions

Generate .env file content from the project manifest (.q-ring.json). Resolves each declared secret from q-ring, collapses superposition, and returns .env formatted output. Warns about missing or expired secrets.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
projectPathNoProject root path for project-scoped secrets
envNoEnvironment for superposition collapse (e.g., dev, staging, prod)

Implementation Reference

  • The tool "env_generate" is defined and registered in src/mcp/server.ts, including its input schema and the handler implementation which resolves secrets from the project manifest and returns .env formatted output.
    server.tool(
      "env_generate",
      "Generate .env file content from the project manifest (.q-ring.json). Resolves each declared secret from q-ring, collapses superposition, and returns .env formatted output. Warns about missing or expired secrets.",
      {
        projectPath: projectPathSchema,
        env: envSchema,
      },
      async (params) => {
        const projectPath = params.projectPath ?? process.cwd();
        const config = readProjectConfig(projectPath);
    
        if (!config?.secrets || Object.keys(config.secrets).length === 0) {
          return text("No secrets manifest found in .q-ring.json", true);
        }
    
        const lines: string[] = [];
        const warnings: string[] = [];
    
        for (const [key, manifest] of Object.entries(config.secrets)) {
          const value = getSecret(key, {
            projectPath,
            env: params.env,
            source: "mcp",
          });
    
          if (value === null) {
            if (manifest.required !== false) {
              warnings.push(`MISSING (required): ${key}`);
            }
            lines.push(`# ${key}=`);
            continue;
          }
    
          const result = getEnvelope(key, { projectPath, source: "mcp" });
          if (result) {
            const decay = checkDecay(result.envelope);
            if (decay.isExpired) warnings.push(`EXPIRED: ${key}`);
            else if (decay.isStale) warnings.push(`STALE: ${key}`);
          }
    
          const escaped = value
            .replace(/\\/g, "\\\\")
            .replace(/"/g, '\\"')
            .replace(/\n/g, "\\n");
          lines.push(`${key}="${escaped}"`);
        }
    
        const output = lines.join("\n");
        const result = warnings.length > 0
          ? `${output}\n\n# Warnings:\n${warnings.map((w) => `# ${w}`).join("\n")}`
          : output;
    
        return text(result);
      },

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/I4cTime/quantum_ring'

If you have feedback or need assistance with the MCP directory API, please join our Discord server