File size: 2,276 Bytes
98407a1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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()