@lightninglabs/lightning-mcp-server 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/.claude-plugin/marketplace.json +36 -0
  2. package/.claude-plugin/plugin.json +12 -0
  3. package/README.md +307 -0
  4. package/bin/lightning-mcp-server +15 -0
  5. package/docs/architecture.md +455 -0
  6. package/docs/commerce.md +357 -0
  7. package/docs/l402-and-lnget.md +267 -0
  8. package/docs/mcp-server.md +285 -0
  9. package/docs/quickref.md +263 -0
  10. package/docs/security.md +298 -0
  11. package/docs/two-agent-setup.md +394 -0
  12. package/package.json +52 -0
  13. package/postinstall.js +160 -0
  14. package/skills/aperture/SKILL.md +330 -0
  15. package/skills/aperture/scripts/install.sh +68 -0
  16. package/skills/aperture/scripts/setup.sh +155 -0
  17. package/skills/aperture/scripts/start.sh +81 -0
  18. package/skills/aperture/scripts/stop.sh +57 -0
  19. package/skills/aperture/templates/aperture-regtest.yaml +36 -0
  20. package/skills/aperture/templates/aperture.yaml.template +64 -0
  21. package/skills/aperture/templates/docker-compose-aperture.yml +59 -0
  22. package/skills/commerce/SKILL.md +211 -0
  23. package/skills/lib/config-gen.sh +127 -0
  24. package/skills/lib/rest.sh +69 -0
  25. package/skills/lightning-security-module/SKILL.md +253 -0
  26. package/skills/lightning-security-module/references/architecture.md +133 -0
  27. package/skills/lightning-security-module/scripts/docker-start.sh +117 -0
  28. package/skills/lightning-security-module/scripts/docker-stop.sh +53 -0
  29. package/skills/lightning-security-module/scripts/export-credentials.sh +268 -0
  30. package/skills/lightning-security-module/scripts/install.sh +178 -0
  31. package/skills/lightning-security-module/scripts/setup-signer.sh +307 -0
  32. package/skills/lightning-security-module/scripts/start-signer.sh +152 -0
  33. package/skills/lightning-security-module/scripts/stop-signer.sh +240 -0
  34. package/skills/lightning-security-module/templates/docker-compose-signer.yml +35 -0
  35. package/skills/lightning-security-module/templates/signer-lnd.conf.template +69 -0
  36. package/skills/lnd/SKILL.md +441 -0
  37. package/skills/lnd/profiles/debug.env +4 -0
  38. package/skills/lnd/profiles/default.env +3 -0
  39. package/skills/lnd/profiles/regtest.env +4 -0
  40. package/skills/lnd/profiles/taproot.env +3 -0
  41. package/skills/lnd/profiles/wumbo.env +3 -0
  42. package/skills/lnd/references/security.md +156 -0
  43. package/skills/lnd/scripts/create-wallet.sh +464 -0
  44. package/skills/lnd/scripts/docker-start.sh +256 -0
  45. package/skills/lnd/scripts/docker-stop.sh +109 -0
  46. package/skills/lnd/scripts/import-credentials.sh +145 -0
  47. package/skills/lnd/scripts/install.sh +195 -0
  48. package/skills/lnd/scripts/lncli.sh +150 -0
  49. package/skills/lnd/scripts/start-lnd.sh +241 -0
  50. package/skills/lnd/scripts/stop-lnd.sh +218 -0
  51. package/skills/lnd/scripts/unlock-wallet.sh +134 -0
  52. package/skills/lnd/templates/docker-compose-regtest.yml +122 -0
  53. package/skills/lnd/templates/docker-compose-watchonly.yml +71 -0
  54. package/skills/lnd/templates/docker-compose.yml +49 -0
  55. package/skills/lnd/templates/litd-regtest.conf.template +61 -0
  56. package/skills/lnd/templates/litd-watchonly.conf.template +57 -0
  57. package/skills/lnd/templates/litd.conf.template +88 -0
  58. package/skills/lnd/templates/lnd.conf.template +91 -0
  59. package/skills/lnget/SKILL.md +288 -0
  60. package/skills/lnget/scripts/install.sh +69 -0
  61. package/skills/macaroon-bakery/SKILL.md +179 -0
  62. package/skills/macaroon-bakery/scripts/bake.sh +337 -0
  63. package/skills/mcp-lnc/SKILL.md +280 -0
  64. package/skills/mcp-lnc/scripts/configure.sh +130 -0
  65. package/skills/mcp-lnc/scripts/install.sh +103 -0
  66. package/skills/mcp-lnc/scripts/setup-claude-config.sh +162 -0
  67. package/skills/mcp-lnc/templates/env.template +16 -0
  68. package/versions.env +23 -0
@@ -0,0 +1,130 @@
1
+ #!/usr/bin/env bash
2
+ # Configure the MCP LNC server environment.
3
+ #
4
+ # Usage:
5
+ # configure.sh # Interactive defaults (production mailbox)
6
+ # configure.sh --production # Production settings
7
+ # configure.sh --dev # Development/regtest settings
8
+ # configure.sh --dev --mailbox host # Custom mailbox server
9
+ # configure.sh --dev --insecure # Dev mode with TLS verification disabled
10
+ #
11
+ # Writes to mcp-server/.env in the lightning-agent-kit repo.
12
+
13
+ set -e
14
+
15
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
16
+ MCP_SERVER_DIR="$(cd "$SCRIPT_DIR/../../.." && pwd)/mcp-server"
17
+
18
+ MAILBOX=""
19
+ DEV_MODE=""
20
+ INSECURE=""
21
+ TIMEOUT=""
22
+ MODE=""
23
+
24
+ # Parse arguments.
25
+ while [[ $# -gt 0 ]]; do
26
+ case $1 in
27
+ --production)
28
+ MODE="production"
29
+ shift
30
+ ;;
31
+ --dev)
32
+ MODE="dev"
33
+ shift
34
+ ;;
35
+ --mailbox)
36
+ MAILBOX="$2"
37
+ shift 2
38
+ ;;
39
+ --insecure)
40
+ INSECURE="true"
41
+ shift
42
+ ;;
43
+ --timeout)
44
+ TIMEOUT="$2"
45
+ shift 2
46
+ ;;
47
+ -h|--help)
48
+ echo "Usage: configure.sh [options]"
49
+ echo ""
50
+ echo "Configure the MCP LNC server environment."
51
+ echo ""
52
+ echo "Modes:"
53
+ echo " --production Production settings (default mailbox, TLS enabled)"
54
+ echo " --dev Development settings (dev mode, insecure TLS)"
55
+ echo ""
56
+ echo "Options:"
57
+ echo " --mailbox SERVER Mailbox server address (host:port)"
58
+ echo " --insecure Skip TLS verification (dev only)"
59
+ echo " --timeout SECS Connection timeout (default: 30)"
60
+ exit 0
61
+ ;;
62
+ *)
63
+ echo "Unknown option: $1" >&2
64
+ exit 1
65
+ ;;
66
+ esac
67
+ done
68
+
69
+ # Verify mcp-server directory exists.
70
+ if [ ! -d "$MCP_SERVER_DIR" ]; then
71
+ echo "Error: mcp-server/ directory not found at $MCP_SERVER_DIR" >&2
72
+ exit 1
73
+ fi
74
+
75
+ # Apply mode defaults.
76
+ case $MODE in
77
+ production)
78
+ MAILBOX="${MAILBOX:-mailbox.terminal.lightning.today:443}"
79
+ DEV_MODE="${DEV_MODE:-false}"
80
+ INSECURE="${INSECURE:-false}"
81
+ ;;
82
+ dev)
83
+ MAILBOX="${MAILBOX:-mailbox.terminal.lightning.today:443}"
84
+ DEV_MODE="${DEV_MODE:-true}"
85
+ INSECURE="${INSECURE:-true}"
86
+ ;;
87
+ *)
88
+ MAILBOX="${MAILBOX:-mailbox.terminal.lightning.today:443}"
89
+ DEV_MODE="${DEV_MODE:-false}"
90
+ INSECURE="${INSECURE:-false}"
91
+ ;;
92
+ esac
93
+
94
+ TIMEOUT="${TIMEOUT:-30}"
95
+
96
+ ENV_FILE="$MCP_SERVER_DIR/.env"
97
+
98
+ echo "=== Configuring MCP LNC Server ==="
99
+ echo ""
100
+ echo "Mailbox: $MAILBOX"
101
+ echo "Dev mode: $DEV_MODE"
102
+ echo "Insecure: $INSECURE"
103
+ echo "Timeout: ${TIMEOUT}s"
104
+ echo "Output: $ENV_FILE"
105
+ echo ""
106
+
107
+ cat > "$ENV_FILE" <<EOF
108
+ # MCP LNC Server Configuration
109
+ # Generated by configure.sh on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
110
+
111
+ # Mailbox relay server
112
+ LNC_MAILBOX_SERVER=$MAILBOX
113
+
114
+ # Enable dev mode for local/regtest environments
115
+ LNC_DEV_MODE=$DEV_MODE
116
+
117
+ # Skip TLS verification (only for development!)
118
+ LNC_INSECURE=$INSECURE
119
+
120
+ # Connection timeout in seconds
121
+ LNC_CONNECT_TIMEOUT=$TIMEOUT
122
+ EOF
123
+
124
+ chmod 600 "$ENV_FILE"
125
+
126
+ echo "Configuration written to $ENV_FILE (mode 0600)"
127
+ echo ""
128
+ echo "Next steps:"
129
+ echo " 1. Add to Claude Code: skills/mcp-lnc/scripts/setup-claude-config.sh"
130
+ echo " 2. Restart Claude Code to pick up the new MCP server"
@@ -0,0 +1,103 @@
1
+ #!/usr/bin/env bash
2
+ # Build and install the MCP LNC server from source.
3
+ #
4
+ # Usage:
5
+ # install.sh # Build from mcp-server/ in this repo
6
+ # install.sh --release # Build optimized release binary
7
+ #
8
+ # Prerequisites: Go 1.24+
9
+
10
+ set -e
11
+
12
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
13
+ MCP_SERVER_DIR="$(cd "$SCRIPT_DIR/../../.." && pwd)/mcp-server"
14
+ RELEASE=false
15
+
16
+ # Parse arguments.
17
+ while [[ $# -gt 0 ]]; do
18
+ case $1 in
19
+ --release)
20
+ RELEASE=true
21
+ shift
22
+ ;;
23
+ -h|--help)
24
+ echo "Usage: install.sh [--release]"
25
+ echo ""
26
+ echo "Build and install the MCP LNC server."
27
+ echo ""
28
+ echo "Options:"
29
+ echo " --release Build optimized release binary (no dev tags)"
30
+ exit 0
31
+ ;;
32
+ *)
33
+ echo "Unknown option: $1" >&2
34
+ exit 1
35
+ ;;
36
+ esac
37
+ done
38
+
39
+ echo "=== Installing MCP LNC Server ==="
40
+ echo ""
41
+
42
+ # Verify Go is installed.
43
+ if ! command -v go &>/dev/null; then
44
+ echo "Error: Go is not installed." >&2
45
+ echo "Install Go from https://go.dev/dl/" >&2
46
+ exit 1
47
+ fi
48
+
49
+ GO_VERSION=$(go version | grep -oE 'go[0-9]+\.[0-9]+' | head -1)
50
+ echo "Go version: $GO_VERSION"
51
+
52
+ # Verify mcp-server directory exists.
53
+ if [ ! -d "$MCP_SERVER_DIR" ]; then
54
+ echo "Error: mcp-server/ directory not found at $MCP_SERVER_DIR" >&2
55
+ echo "Are you running this from the lightning-agent-kit repo?" >&2
56
+ exit 1
57
+ fi
58
+
59
+ if [ ! -f "$MCP_SERVER_DIR/go.mod" ]; then
60
+ echo "Error: go.mod not found in $MCP_SERVER_DIR" >&2
61
+ exit 1
62
+ fi
63
+
64
+ echo "Source: $MCP_SERVER_DIR"
65
+ echo ""
66
+
67
+ GOBIN=$(go env GOPATH)/bin
68
+
69
+ # Build the binary.
70
+ cd "$MCP_SERVER_DIR"
71
+
72
+ if [ "$RELEASE" = true ]; then
73
+ echo "Building release binary..."
74
+ COMMIT=$(git describe --abbrev=40 --always --dirty 2>/dev/null || echo "unknown")
75
+ PKG="github.com/lightninglabs/lightning-agent-kit/mcp-server"
76
+ go build -v -ldflags "-X ${PKG}.Commit=${COMMIT}" -o "$GOBIN/mcp-lnc-server" .
77
+ else
78
+ echo "Building debug binary..."
79
+ COMMIT=$(git describe --abbrev=40 --always --dirty 2>/dev/null || echo "unknown")
80
+ PKG="github.com/lightninglabs/lightning-agent-kit/mcp-server"
81
+ go build -v -tags "dev" -ldflags "-X ${PKG}.Commit=${COMMIT}" -o "$GOBIN/mcp-lnc-server" .
82
+ fi
83
+
84
+ echo "Done."
85
+ echo ""
86
+
87
+ # Verify installation.
88
+ if command -v mcp-lnc-server &>/dev/null; then
89
+ echo "mcp-lnc-server installed: $(which mcp-lnc-server)"
90
+ mcp-lnc-server -version 2>/dev/null || true
91
+ else
92
+ echo "Warning: mcp-lnc-server not found on PATH." >&2
93
+ echo "Binary built at: $GOBIN/mcp-lnc-server" >&2
94
+ echo "Ensure \$GOPATH/bin is in your PATH." >&2
95
+ echo " export PATH=\$PATH:\$(go env GOPATH)/bin" >&2
96
+ fi
97
+
98
+ echo ""
99
+ echo "Installation complete."
100
+ echo ""
101
+ echo "Next steps:"
102
+ echo " 1. Configure: skills/mcp-lnc/scripts/configure.sh"
103
+ echo " 2. Add to Claude Code: skills/mcp-lnc/scripts/setup-claude-config.sh"
@@ -0,0 +1,162 @@
1
+ #!/usr/bin/env bash
2
+ # Add the MCP LNC server to Claude Code's MCP configuration.
3
+ #
4
+ # Usage:
5
+ # setup-claude-config.sh # Project-level config (.mcp.json)
6
+ # setup-claude-config.sh --scope global # Global config (~/.claude.json)
7
+ # setup-claude-config.sh --scope project # Project config (.mcp.json)
8
+ # setup-claude-config.sh --docker # Use Docker instead of local binary
9
+ #
10
+ # Requires: jq
11
+
12
+ set -e
13
+
14
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
15
+ MCP_SERVER_DIR="$(cd "$SCRIPT_DIR/../../.." && pwd)/mcp-server"
16
+
17
+ SCOPE="project"
18
+ USE_DOCKER=false
19
+
20
+ # Parse arguments.
21
+ while [[ $# -gt 0 ]]; do
22
+ case $1 in
23
+ --scope)
24
+ SCOPE="$2"
25
+ shift 2
26
+ ;;
27
+ --docker)
28
+ USE_DOCKER=true
29
+ shift
30
+ ;;
31
+ -h|--help)
32
+ echo "Usage: setup-claude-config.sh [options]"
33
+ echo ""
34
+ echo "Add the MCP LNC server to Claude Code's MCP configuration."
35
+ echo ""
36
+ echo "Options:"
37
+ echo " --scope project Add to .mcp.json in repo root (default)"
38
+ echo " --scope global Add to ~/.claude.json (all projects)"
39
+ echo " --docker Use Docker to run the server"
40
+ exit 0
41
+ ;;
42
+ *)
43
+ echo "Unknown option: $1" >&2
44
+ exit 1
45
+ ;;
46
+ esac
47
+ done
48
+
49
+ # Verify jq is available.
50
+ if ! command -v jq &>/dev/null; then
51
+ echo "Error: jq is required. Install with: brew install jq" >&2
52
+ exit 1
53
+ fi
54
+
55
+ # Determine config file path.
56
+ REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
57
+ case $SCOPE in
58
+ project)
59
+ CONFIG_FILE="$REPO_ROOT/.mcp.json"
60
+ ;;
61
+ global)
62
+ CONFIG_FILE="$HOME/.claude.json"
63
+ ;;
64
+ *)
65
+ echo "Error: --scope must be 'project' or 'global'" >&2
66
+ exit 1
67
+ ;;
68
+ esac
69
+
70
+ echo "=== Setting Up Claude Code MCP Config ==="
71
+ echo ""
72
+ echo "Scope: $SCOPE"
73
+ echo "Config: $CONFIG_FILE"
74
+ echo ""
75
+
76
+ # Load .env to read mailbox config.
77
+ ENV_FILE="$MCP_SERVER_DIR/.env"
78
+ LNC_MAILBOX_SERVER="mailbox.terminal.lightning.today:443"
79
+ LNC_DEV_MODE="false"
80
+ LNC_INSECURE="false"
81
+
82
+ if [ -f "$ENV_FILE" ]; then
83
+ # Source only known variables.
84
+ while IFS='=' read -r key value; do
85
+ # Skip comments and empty lines.
86
+ [[ "$key" =~ ^#.*$ ]] && continue
87
+ [[ -z "$key" ]] && continue
88
+ # Trim whitespace.
89
+ key=$(echo "$key" | xargs)
90
+ value=$(echo "$value" | xargs)
91
+ case "$key" in
92
+ LNC_MAILBOX_SERVER) LNC_MAILBOX_SERVER="$value" ;;
93
+ LNC_DEV_MODE) LNC_DEV_MODE="$value" ;;
94
+ LNC_INSECURE) LNC_INSECURE="$value" ;;
95
+ esac
96
+ done < "$ENV_FILE"
97
+ fi
98
+
99
+ # Build the MCP server config JSON.
100
+ if [ "$USE_DOCKER" = true ]; then
101
+ MCP_ENTRY=$(jq -n \
102
+ --arg mailbox "$LNC_MAILBOX_SERVER" \
103
+ --arg devmode "$LNC_DEV_MODE" \
104
+ --arg insecure "$LNC_INSECURE" \
105
+ '{
106
+ command: "docker",
107
+ args: ["run", "--rm", "-i", "--network", "host",
108
+ "--env", "LNC_MAILBOX_SERVER",
109
+ "--env", "LNC_DEV_MODE",
110
+ "--env", "LNC_INSECURE",
111
+ "mcp-lnc-server"],
112
+ env: {
113
+ LNC_MAILBOX_SERVER: $mailbox,
114
+ LNC_DEV_MODE: $devmode,
115
+ LNC_INSECURE: $insecure
116
+ }
117
+ }')
118
+ else
119
+ # Check that binary exists.
120
+ BINARY_PATH=$(command -v mcp-lnc-server 2>/dev/null || echo "")
121
+ if [ -z "$BINARY_PATH" ]; then
122
+ echo "Warning: mcp-lnc-server not found on PATH." >&2
123
+ echo "Run install.sh first, or use --docker." >&2
124
+ echo ""
125
+ BINARY_PATH="mcp-lnc-server"
126
+ fi
127
+
128
+ MCP_ENTRY=$(jq -n \
129
+ --arg cmd "$BINARY_PATH" \
130
+ --arg mailbox "$LNC_MAILBOX_SERVER" \
131
+ --arg devmode "$LNC_DEV_MODE" \
132
+ --arg insecure "$LNC_INSECURE" \
133
+ '{
134
+ command: $cmd,
135
+ env: {
136
+ LNC_MAILBOX_SERVER: $mailbox,
137
+ LNC_DEV_MODE: $devmode,
138
+ LNC_INSECURE: $insecure
139
+ }
140
+ }')
141
+ fi
142
+
143
+ # Read or create config file.
144
+ if [ -f "$CONFIG_FILE" ]; then
145
+ CONFIG=$(cat "$CONFIG_FILE")
146
+ else
147
+ CONFIG='{}'
148
+ fi
149
+
150
+ # Add or update the lnc server entry.
151
+ UPDATED=$(echo "$CONFIG" | jq --argjson entry "$MCP_ENTRY" '.mcpServers.lnc = $entry')
152
+
153
+ echo "$UPDATED" | jq . > "$CONFIG_FILE"
154
+
155
+ echo "MCP server config written to $CONFIG_FILE"
156
+ echo ""
157
+ echo "Entry added:"
158
+ echo "$MCP_ENTRY" | jq .
159
+ echo ""
160
+ echo "Next steps:"
161
+ echo " 1. Restart Claude Code to pick up the new MCP server"
162
+ echo " 2. Use lnc_connect with a pairing phrase to connect to your node"
@@ -0,0 +1,16 @@
1
+ # MCP LNC Server Configuration
2
+ # Copy this file to mcp-server/.env and customize for your environment.
3
+
4
+ # Default mailbox server address
5
+ # Production: mailbox.terminal.lightning.today:443
6
+ # Regtest: aperture:11110
7
+ LNC_MAILBOX_SERVER=mailbox.terminal.lightning.today:443
8
+
9
+ # Enable dev mode for local/regtest environments
10
+ LNC_DEV_MODE=false
11
+
12
+ # Skip TLS verification (only for development!)
13
+ LNC_INSECURE=false
14
+
15
+ # Connection timeout in seconds
16
+ LNC_CONNECT_TIMEOUT=30
package/versions.env ADDED
@@ -0,0 +1,23 @@
1
+ # Container image version pins for lightning-agent-kit.
2
+ #
3
+ # These versions are sourced by install scripts and docker-compose templates.
4
+ # The kit version is tracked separately in .claude-plugin/plugin.json.
5
+ #
6
+ # To override a version at runtime:
7
+ # LITD_VERSION=v0.17.0-alpha docker-start.sh
8
+
9
+ # Lightning Terminal (litd) — bundles lnd, loop, pool, tapd, faraday.
10
+ LITD_VERSION=v0.16.0-alpha
11
+ LITD_IMAGE=lightninglabs/lightning-terminal
12
+
13
+ # LND — used for the remote signer container (signing-only, no litd needed).
14
+ LND_VERSION=v0.20.0-beta
15
+ LND_IMAGE=lightninglabs/lnd
16
+
17
+ # Aperture — L402 reverse proxy for paid API endpoints.
18
+ APERTURE_VERSION=v0.4.2
19
+ APERTURE_IMAGE=lightninglabs/aperture
20
+
21
+ # Bitcoin Core — only used in regtest development mode.
22
+ BITCOIN_CORE_VERSION=30
23
+ BITCOIN_CORE_IMAGE=lightninglabs/bitcoin-core