secrets-manager-mcp / server.py
Brettapps's picture
Upload folder using huggingface_hub
98407a1 verified
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()