Class: Mcp::Secrets

Inherits:
Object
  • Object
show all
Defined in:
lib/mcp/secrets.rb

Overview

CRUD operations for MCP server secrets stored in Rails encrypted credentials. Secrets live under the mcp namespace in the credentials file:

mcp:
  linear_api_key: "sk-xxx"
  mythonix_api_key: "Bearer tok-yyy"

Referenced in mcp.toml via ${credential:key_name} syntax, resolved at runtime by Config#interpolate_credentials.

Examples:

Storing a secret

Mcp::Secrets.set("linear_api_key", "sk-xxx")

Retrieving a secret

Mcp::Secrets.get("linear_api_key") #=> "sk-xxx"

Constant Summary collapse

NAMESPACE =
"mcp"
VALID_KEY_PATTERN =

Keys must be interpolatable via $credential:key_name in mcp.toml.

/\A\w+\z/

Class Method Summary collapse

Class Method Details

.get(key) ⇒ String?

Retrieves a secret from encrypted credentials.

Parameters:

  • key (String)

    secret identifier

Returns:

  • (String, nil)

    secret value or nil if not found



42
43
44
# File 'lib/mcp/secrets.rb', line 42

def get(key)
  CredentialStore.read(NAMESPACE, key)
end

.listArray<String>

Lists all stored MCP secret keys (not values).

Returns:

  • (Array<String>)

    secret names



49
50
51
# File 'lib/mcp/secrets.rb', line 49

def list
  CredentialStore.list(NAMESPACE)
end

.remove(key) ⇒ void

This method returns an undefined value.

Removes a secret from encrypted credentials.

Parameters:

  • key (String)

    secret identifier to remove



57
58
59
# File 'lib/mcp/secrets.rb', line 57

def remove(key)
  CredentialStore.remove(NAMESPACE, key)
end

.set(key, value) ⇒ void

This method returns an undefined value.

Stores a secret in encrypted credentials.

Parameters:

  • key (String)

    secret identifier (e.g. “linear_api_key”)

  • value (String)

    secret value

Raises:

  • (ArgumentError)

    if key contains characters that cannot be referenced via ${credential:key_name} syntax



33
34
35
36
# File 'lib/mcp/secrets.rb', line 33

def set(key, value)
  validate_key!(key)
  CredentialStore.write(NAMESPACE, key => value)
end