Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 22 additions & 12 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -1,15 +1,25 @@
{
"name": "connector-hub",
"version": "2.1.0",
"tagline": "One hub for every external service — 24 providers, 301 operations, spec-driven and auditable.",
"tags": [
"connectors",
"api",
"mcp",
"automation",
"devops"
],
"icon": "plug",
"homepage": "https://github.com/CodeWithJuber/connector-hub",
"repository": "https://github.com/CodeWithJuber/connector-hub"
"version": "2.2.0",
"description": "Spec-driven connector orchestration — 24 providers, 301 operations, type-safe execution contract with audit ledger.",
"owner": {
"name": "Connector Hub contributors",
"url": "https://github.com/CodeWithJuber"
},
"plugins": [
{
"name": "connector-hub",
"source": "./",
"version": "2.2.0",
"description": "Spec-driven connector orchestration — 24 providers, 301 operations, type-safe execution contract with audit ledger.",
"homepage": "https://github.com/CodeWithJuber/connector-hub",
"keywords": [
"connectors",
"api",
"mcp",
"automation",
"devops"
]
}
]
}
2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "connector-hub",
"version": "2.1.0",
"version": "2.2.0",
"description": "Spec-driven connector orchestration — 24 providers, 301 operations, type-safe execution contract with audit ledger.",
"author": {
"name": "Connector Hub contributors",
Expand Down
2 changes: 1 addition & 1 deletion .codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "connector-hub",
"version": "2.1.0",
"version": "2.2.0",
"description": "Spec-driven connector orchestration — 24 providers, 301 operations, type-safe execution contract with audit ledger.",
"author": {
"name": "Connector Hub contributors",
Expand Down
2 changes: 1 addition & 1 deletion .mcp.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"mcpServers": {
"connector-hub": {
"command": "${CLAUDE_PLUGIN_ROOT}/crates/target/release/connector-hub",
"command": "${CLAUDE_PLUGIN_ROOT}/bin/connector-hub-mcp",
"args": [
"mcp"
],
Expand Down
20 changes: 20 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,26 @@ connector-hub audit-verify audit.jsonl

See `docs/adr/0004-audit-ledger-format.md` for the format specification.

## Credentials

Connectors read credentials from the environment. MCP hosts launch stdio
servers with a bare environment, so `bin/connector-hub-mcp` sources
`~/.config/connector-hub/env` (override with `CONNECTOR_HUB_ENV`) before exec.
One file, shared by every agent on the machine:

```sh
mkdir -p ~/.config/connector-hub
cat > ~/.config/connector-hub/env <<'EOF'
GITHUB_TOKEN="ghp_..."
HETZNER_API_TOKEN="..."
EOF
chmod 600 ~/.config/connector-hub/env
```

Leave unused variables commented out rather than set to `""` — an empty string
reads as configured, which turns a clean `ConfigurationRequired` into a 401
from the provider.

## Security model

- Credentials live in environment variables or an encrypted store. Never in
Expand Down
48 changes: 48 additions & 0 deletions bin/connector-hub-mcp
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/bin/sh
# Locate and run the connector-hub binary.
#
# Plugin hosts (Claude Code, Codex, Kimi) install this repo by cloning it, so
# there is no compiled binary at install time. This resolves one in the places
# it is actually likely to be, and fails with an actionable message otherwise.
#
# Order: $CONNECTOR_HUB_BIN, release build, debug build, $PATH.
ROOT="${CLAUDE_PLUGIN_ROOT:-$(CDPATH='' cd -- "$(dirname -- "$0")/.." && pwd)}"

# Credentials. MCP hosts launch servers with a bare environment, so provider
# keys have to come from somewhere other than the user's shell profile. One
# file, shared by every host on the machine, keeps a key in a single place
# rather than duplicated across each agent's config.
ENV_FILE="${CONNECTOR_HUB_ENV:-${XDG_CONFIG_HOME:-$HOME/.config}/connector-hub/env}"
if [ -f "$ENV_FILE" ]; then
set -a
. "$ENV_FILE"
set +a
fi

if [ -n "$CONNECTOR_HUB_BIN" ] && [ -x "$CONNECTOR_HUB_BIN" ]; then
BIN="$CONNECTOR_HUB_BIN"
elif [ -x "$ROOT/crates/target/release/connector-hub" ]; then
BIN="$ROOT/crates/target/release/connector-hub"
elif [ -x "$ROOT/crates/target/debug/connector-hub" ]; then
BIN="$ROOT/crates/target/debug/connector-hub"
elif command -v connector-hub >/dev/null 2>&1; then
BIN="$(command -v connector-hub)"
else
echo "connector-hub: no binary found." >&2
echo " Build it: cd $ROOT/crates && cargo build --release" >&2
echo " Or point CONNECTOR_HUB_BIN at an existing build." >&2
exit 1
fi

# The catalogue is data, not code — make sure this checkout's specs are used
# even when the binary came from somewhere else on the filesystem.
if [ -z "$CONNECTOR_HUB_SPECS_DIR" ] && [ -d "$ROOT/specs" ]; then
CONNECTOR_HUB_SPECS_DIR="$ROOT/specs"
export CONNECTOR_HUB_SPECS_DIR
fi

if [ $# -eq 0 ]; then
exec "$BIN" mcp
else
exec "$BIN" "$@"
fi
2 changes: 1 addition & 1 deletion kimi.plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "connector-hub",
"version": "2.1.0",
"version": "2.2.0",
"description": "Spec-driven connector orchestration — 24 providers, 301 operations, type-safe execution contract with audit ledger.",
"author": {
"name": "Connector Hub contributors",
Expand Down
Loading