Spaces:
Runtime error
Runtime error
| 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() | |
| 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) | |
| 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) | |
| 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]) | |
| 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() | |