from mcp.server.fastmcp import FastMCP from secrets_manager.hf_secrets import HFSecretsManager import os from dotenv import load_dotenv from typing import List, Optional # Load environment variables load_dotenv() # Initialize FastMCP mcp = FastMCP("Secrets-Manager") # Initialize Secrets Manager secrets_mgr = HFSecretsManager() @mcp.tool() def add_space_secret(repo_id: str, secret_name: str, secret_value: str) -> str: """ Adds or updates a secret (environment variable) in a Hugging Face Space. Args: repo_id: The full Space ID (e.g., 'username/space-name'). secret_name: The name of the secret (e.g., 'OPENAI_API_KEY'). secret_value: The value of the secret. """ # Note: FastMCP logs tool calls, but we should be careful about printing values. # The return message is safe. return secrets_mgr.add_secret(repo_id, secret_name, secret_value) @mcp.tool() def delete_space_secret(repo_id: str, secret_name: str) -> str: """ Deletes a secret from a Hugging Face Space. """ return secrets_mgr.delete_secret(repo_id, secret_name) @mcp.tool() def list_space_secrets(repo_id: str) -> str: """ Lists the names of all secrets currently configured in a Hugging Face Space. Note: Values are hidden by Hugging Face. """ keys = secrets_mgr.list_secrets(repo_id) if not keys: return f"No secrets found in {repo_id}." return f"Secrets in {repo_id}:\n" + "\n".join([f"- {k}" for k in keys]) @mcp.tool() def configure_agent_space(repo_id: str, openai_key: Optional[str] = None, stripe_key: Optional[str] = None, hf_token: Optional[str] = None) -> str: """ Helper tool to quickly configure a new agent Space with necessary secrets. """ results = [] if openai_key: results.append(secrets_mgr.add_secret(repo_id, "OPENAI_API_KEY", openai_key)) if stripe_key: results.append(secrets_mgr.add_secret(repo_id, "STRIPE_SECRET_KEY", stripe_key)) if hf_token: results.append(secrets_mgr.add_secret(repo_id, "HF_TOKEN", hf_token)) if not results: return "No keys provided to configure." return "Configuration Summary:\n" + "\n".join(results) def main(): mcp.run() if __name__ == "__main__": main()