diff --git a/mcp-registry/schema/server-schema.json b/mcp-registry/schema/server-schema.json index 058374e2..ff8fcc30 100644 --- a/mcp-registry/schema/server-schema.json +++ b/mcp-registry/schema/server-schema.json @@ -291,6 +291,10 @@ }, "is_official": { "type": "boolean" + }, + "docker_url": { + "type": "string", + "description": "URL to the Docker Hub page for this server, empty if not available" } } -} \ No newline at end of file +} diff --git a/mcp-registry/servers/armor-crypto.json b/mcp-registry/servers/armor-crypto.json new file mode 100644 index 00000000..7d97ebc6 --- /dev/null +++ b/mcp-registry/servers/armor-crypto.json @@ -0,0 +1,2142 @@ +{ + "display_name": "Armor Crypto MCP", + "license": "MIT", + "tags": [ + "crypto", + "wallet", + "blockchain", + "AI", + "Solana", + "DCA", + "swaps", + "staking", + "multi-chain", + "agent integration" + ], + "installations": { + "uvx": { + "type": "uvx", + "command": "uvx", + "args": [ + "armor-crypto-mcp@latest", + "--version" + ], + "env": { + "ARMOR_API_KEY": "${ARMOR_API_KEY}" + }, + "description": "Installation for Armor Crypto MCP using uvx" + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "ARMOR_API_URL", + "-e", + "ARMOR_API_KEY", + "mcp/armor-crypto" + ], + "env": { + "ARMOR_API_URL": "https://app.armorwallet.ai/api/v1", + "ARMOR_API_KEY": "${ARMOR_API_KEY}" + } + } + }, + "arguments": { + "ARMOR_API_KEY": { + "description": "Your Armor API key required for authenticating requests to the Armor API.", + "required": true, + "example": "" + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "Create a new wallet for me on Solana" + }, + { + "title": "", + "description": "", + "prompt": "Show me trending tokens on Solana" + }, + { + "title": "", + "description": "", + "prompt": "I want to swap 0.1 SOL for USDC" + }, + { + "title": "", + "description": "", + "prompt": "Set up a DCA strategy to buy SOL weekly" + }, + { + "title": "", + "description": "", + "prompt": "Create a limit order to buy SOL when it drops to $100" + }, + { + "title": "", + "description": "", + "prompt": "Show me my wallet balances" + }, + { + "title": "", + "description": "", + "prompt": "Stake 1 SOL in a validator" + }, + { + "title": "", + "description": "", + "prompt": "Calculate the potential return if I invest 5 SOL today" + }, + { + "title": "", + "description": "", + "prompt": "Cancel my pending limit orders" + }, + { + "title": "", + "description": "", + "prompt": "Archive my old wallet" + } + ], + "name": "armor-crypto", + "repository": { + "type": "git", + "url": "https://github.com/armorwallet/armor-crypto-mcp" + }, + "homepage": "https://github.com/armorwallet/armor-crypto-mcp", + "author": { + "name": "armorwallet" + }, + "description": "*Alpha Test version 0.1*", + "categories": [ + "Finance" + ], + "tools": [ + { + "name": "get_armor_mcp_version", + "description": "Get the current Armor Wallet version", + "inputSchema": { + "properties": {}, + "title": "get_armor_mcp_versionArguments", + "type": "object" + } + }, + { + "name": "wait_a_moment", + "description": "Wait for some short amount of time, no more than 10 seconds", + "inputSchema": { + "properties": { + "seconds": { + "title": "Seconds", + "type": "number" + } + }, + "required": [ + "seconds" + ], + "title": "wait_a_momentArguments", + "type": "object" + } + }, + { + "name": "get_current_time", + "description": "Gets the current time and date", + "inputSchema": { + "properties": {}, + "title": "get_current_timeArguments", + "type": "object" + } + }, + { + "name": "calculator", + "description": "\n Safely evaluates a mathematical or statistical expression string using Python syntax.\n\n Supports arithmetic operations (+, -, *, /, **, %, //), list expressions, and a range of math and statistics functions: \n abs, round, min, max, len, sum, mean, median, stdev, variance, sin, cos, tan, sqrt, log, exp, floor, ceil, etc.\n\n Custom variables can be passed via the 'variables' dict, including lists for time series data.\n ", + "inputSchema": { + "properties": { + "expression": { + "title": "Expression", + "type": "string" + }, + "variables": { + "additionalProperties": true, + "title": "Variables", + "type": "object" + } + }, + "required": [ + "expression", + "variables" + ], + "title": "calculatorArguments", + "type": "object" + } + }, + { + "name": "get_wallet_token_balance", + "description": "\n Get the balance for a list of wallet/token pairs.\n \n Expects a WalletTokenPairsContainer, returns a list of WalletTokenBalance.\n ", + "inputSchema": { + "$defs": { + "WalletTokenPairs": { + "properties": { + "wallet": { + "description": "The name of wallet. To get wallet names use `get_user_wallets_and_groups_list`", + "title": "Wallet", + "type": "string" + }, + "token": { + "description": "public address of token. To get the address from a token symbol use `get_token_details`", + "title": "Token", + "type": "string" + } + }, + "required": [ + "wallet", + "token" + ], + "title": "WalletTokenPairs", + "type": "object" + }, + "WalletTokenPairsContainer": { + "properties": { + "wallet_token_pairs": { + "items": { + "$ref": "#/$defs/WalletTokenPairs" + }, + "title": "Wallet Token Pairs", + "type": "array" + } + }, + "required": [ + "wallet_token_pairs" + ], + "title": "WalletTokenPairsContainer", + "type": "object" + } + }, + "properties": { + "wallet_token_pairs": { + "$ref": "#/$defs/WalletTokenPairsContainer" + } + }, + "required": [ + "wallet_token_pairs" + ], + "title": "get_wallet_token_balanceArguments", + "type": "object" + } + }, + { + "name": "calculate_token_conversion", + "description": "\n Perform token conversion quote between two tokens. Good for quickly calculating market prices.\n \n Expects a ConversionRequestContainer, returns a list of ConversionResponse.\n ", + "inputSchema": { + "$defs": { + "ConversionRequest": { + "properties": { + "input_amount": { + "description": "input amount to convert", + "title": "Input Amount", + "type": "number" + }, + "input_token": { + "description": "public address of input token", + "title": "Input Token", + "type": "string" + }, + "output_token": { + "description": "public address of output token", + "title": "Output Token", + "type": "string" + } + }, + "required": [ + "input_amount", + "input_token", + "output_token" + ], + "title": "ConversionRequest", + "type": "object" + }, + "ConversionRequestContainer": { + "properties": { + "conversion_requests": { + "items": { + "$ref": "#/$defs/ConversionRequest" + }, + "title": "Conversion Requests", + "type": "array" + } + }, + "required": [ + "conversion_requests" + ], + "title": "ConversionRequestContainer", + "type": "object" + } + }, + "properties": { + "conversion_requests": { + "$ref": "#/$defs/ConversionRequestContainer" + } + }, + "required": [ + "conversion_requests" + ], + "title": "calculate_token_conversionArguments", + "type": "object" + } + }, + { + "name": "swap_quote", + "description": "\n Retrieve a swap quote.\n \n Expects a SwapQuoteRequestContainer, returns a list of SwapQuoteResponse.\n ", + "inputSchema": { + "$defs": { + "SwapQuoteRequest": { + "properties": { + "from_wallet": { + "description": "The name of the wallet that input_token is in.", + "title": "From Wallet", + "type": "string" + }, + "input_token": { + "description": "public mint address of input token. To get the address from a token symbol use `get_token_details`", + "title": "Input Token", + "type": "string" + }, + "output_token": { + "description": "public mint address of output token. To get the address from a token symbol use `get_token_details`", + "title": "Output Token", + "type": "string" + }, + "input_amount": { + "description": "input amount to swap", + "title": "Input Amount", + "type": "number" + }, + "slippage": { + "default": "slippage percentage. To estimate slippage based on liquidity see `get_token_details` for the input_token_symbol. 1.0 for high liquidity and near 20.0 for lower liquidity.", + "title": "Slippage", + "type": "number" + } + }, + "required": [ + "from_wallet", + "input_token", + "output_token", + "input_amount" + ], + "title": "SwapQuoteRequest", + "type": "object" + }, + "SwapQuoteRequestContainer": { + "properties": { + "swap_quote_requests": { + "items": { + "$ref": "#/$defs/SwapQuoteRequest" + }, + "title": "Swap Quote Requests", + "type": "array" + } + }, + "required": [ + "swap_quote_requests" + ], + "title": "SwapQuoteRequestContainer", + "type": "object" + } + }, + "properties": { + "swap_quote_requests": { + "$ref": "#/$defs/SwapQuoteRequestContainer" + } + }, + "required": [ + "swap_quote_requests" + ], + "title": "swap_quoteArguments", + "type": "object" + } + }, + { + "name": "swap_transaction", + "description": "\n Execute a swap transaction.\n \n Expects a SwapTransactionRequestContainer, returns a list of SwapTransactionResponse.\n ", + "inputSchema": { + "$defs": { + "SwapTransactionRequest": { + "properties": { + "transaction_id": { + "description": "unique id of the generated swap quote", + "title": "Transaction Id", + "type": "string" + } + }, + "required": [ + "transaction_id" + ], + "title": "SwapTransactionRequest", + "type": "object" + }, + "SwapTransactionRequestContainer": { + "properties": { + "swap_transaction_requests": { + "items": { + "$ref": "#/$defs/SwapTransactionRequest" + }, + "title": "Swap Transaction Requests", + "type": "array" + } + }, + "required": [ + "swap_transaction_requests" + ], + "title": "SwapTransactionRequestContainer", + "type": "object" + } + }, + "properties": { + "swap_transaction_requests": { + "$ref": "#/$defs/SwapTransactionRequestContainer" + } + }, + "required": [ + "swap_transaction_requests" + ], + "title": "swap_transactionArguments", + "type": "object" + } + }, + { + "name": "get_all_wallets", + "description": "\n Retrieve all wallets with balances.\n \n Returns a list of Wallets and asssets\n ", + "inputSchema": { + "$defs": { + "ListWalletsRequest": { + "properties": { + "is_archived": { + "default": false, + "description": "whether to include archived wallets", + "title": "Is Archived", + "type": "boolean" + } + }, + "title": "ListWalletsRequest", + "type": "object" + } + }, + "properties": { + "get_all_wallets_requests": { + "$ref": "#/$defs/ListWalletsRequest" + } + }, + "required": [ + "get_all_wallets_requests" + ], + "title": "get_all_walletsArguments", + "type": "object" + } + }, + { + "name": "get_all_orders", + "description": "\n Retrieve all limit and stop loss orders.\n \n Returns a list of orders.\n ", + "inputSchema": { + "$defs": { + "ListOrderRequest": { + "properties": { + "status": { + "anyOf": [ + { + "enum": [ + "OPEN", + "CANCELLED", + "EXPIRED", + "COMPLETED", + "FAILED", + "IN_PROCESS" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "status of the orders, if specified filters results.", + "title": "Status" + }, + "limit": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": 30, + "description": "number of most recent results to return", + "title": "Limit" + } + }, + "required": [ + "status" + ], + "title": "ListOrderRequest", + "type": "object" + } + }, + "properties": { + "get_all_orders_requests": { + "$ref": "#/$defs/ListOrderRequest" + } + }, + "required": [ + "get_all_orders_requests" + ], + "title": "get_all_ordersArguments", + "type": "object" + } + }, + { + "name": "get_token_address", + "description": "\n Get the token address for a token symbol or name.\n ", + "inputSchema": { + "$defs": { + "TokenSearchRequest": { + "properties": { + "query": { + "description": "token symbol or address", + "title": "Query", + "type": "string" + } + }, + "required": [ + "query" + ], + "title": "TokenSearchRequest", + "type": "object" + }, + "TokenSearchRequestContainer": { + "properties": { + "token_search_requests": { + "items": { + "$ref": "#/$defs/TokenSearchRequest" + }, + "title": "Token Search Requests", + "type": "array" + } + }, + "required": [ + "token_search_requests" + ], + "title": "TokenSearchRequestContainer", + "type": "object" + } + }, + "properties": { + "token_address_requests": { + "$ref": "#/$defs/TokenSearchRequestContainer" + } + }, + "required": [ + "token_address_requests" + ], + "title": "get_token_addressArguments", + "type": "object" + } + }, + { + "name": "get_token_details", + "description": "\n Retrieve token details.\n \n Expects a TokenDetailsRequestContainer, returns a list of TokenDetailsResponse.\n ", + "inputSchema": { + "$defs": { + "TokenDetailsRequest": { + "properties": { + "query": { + "description": "token symbol or address", + "title": "Query", + "type": "string" + }, + "sort_by": { + "anyOf": [ + { + "enum": [ + "decimals", + "holders", + "jupiter", + "verified", + "liquidityUsd", + "marketCapUsd", + "priceUsd", + "totalBuys", + "totalSells", + "totalTransactions", + "volume_5m", + "volume", + "volume_15m", + "volume_30m", + "volume_1h", + "volume_6h", + "volume_12h", + "volume_24h" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Sort token data results by this field", + "title": "Sort By" + }, + "sort_order": { + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": "desc", + "description": "The order of the sorted results", + "title": "Sort Order" + }, + "limit": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": 1, + "description": "The number of results to return from the search. Use default unless specified. Should not be over 30 if looking up multiple tokens.", + "title": "Limit" + } + }, + "required": [ + "query", + "sort_by" + ], + "title": "TokenDetailsRequest", + "type": "object" + }, + "TokenDetailsRequestContainer": { + "properties": { + "token_details_requests": { + "items": { + "$ref": "#/$defs/TokenDetailsRequest" + }, + "title": "Token Details Requests", + "type": "array" + } + }, + "required": [ + "token_details_requests" + ], + "title": "TokenDetailsRequestContainer", + "type": "object" + } + }, + "properties": { + "token_details_requests": { + "$ref": "#/$defs/TokenDetailsRequestContainer" + } + }, + "required": [ + "token_details_requests" + ], + "title": "get_token_detailsArguments", + "type": "object" + } + }, + { + "name": "list_groups", + "description": "\n List all wallet groups.\n \n Returns a list of GroupInfo.\n ", + "inputSchema": { + "properties": {}, + "title": "list_groupsArguments", + "type": "object" + } + }, + { + "name": "list_single_group", + "description": "\n Retrieve details for a single wallet group.\n \n Expects the group name as a parameter, returns SingleGroupInfo.\n ", + "inputSchema": { + "$defs": { + "ListSingleGroupRequest": { + "properties": { + "group_name": { + "description": "Name of the group to retrieve details for", + "title": "Group Name", + "type": "string" + } + }, + "required": [ + "group_name" + ], + "title": "ListSingleGroupRequest", + "type": "object" + } + }, + "properties": { + "list_single_group_requests": { + "$ref": "#/$defs/ListSingleGroupRequest" + } + }, + "required": [ + "list_single_group_requests" + ], + "title": "list_single_groupArguments", + "type": "object" + } + }, + { + "name": "create_wallet", + "description": "\n Create new wallets.\n \n Expects a list of wallet names, returns a list of WalletInfo.\n ", + "inputSchema": { + "$defs": { + "CreateWalletRequest": { + "properties": { + "name": { + "description": "Name of the wallet to create", + "title": "Name", + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "CreateWalletRequest", + "type": "object" + }, + "CreateWalletRequestContainer": { + "properties": { + "create_wallet_requests": { + "items": { + "$ref": "#/$defs/CreateWalletRequest" + }, + "title": "Create Wallet Requests", + "type": "array" + } + }, + "required": [ + "create_wallet_requests" + ], + "title": "CreateWalletRequestContainer", + "type": "object" + } + }, + "properties": { + "create_wallet_requests": { + "$ref": "#/$defs/CreateWalletRequestContainer" + } + }, + "required": [ + "create_wallet_requests" + ], + "title": "create_walletArguments", + "type": "object" + } + }, + { + "name": "archive_wallets", + "description": "\n Archive wallets.\n \n Expects a list of wallet names, returns a list of WalletArchiveOrUnarchiveResponse.\n ", + "inputSchema": { + "$defs": { + "ArchiveWalletsRequest": { + "properties": { + "wallet": { + "description": "Name of the wallet to archive", + "title": "Wallet", + "type": "string" + } + }, + "required": [ + "wallet" + ], + "title": "ArchiveWalletsRequest", + "type": "object" + }, + "ArchiveWalletsRequestContainer": { + "properties": { + "archive_wallet_requests": { + "items": { + "$ref": "#/$defs/ArchiveWalletsRequest" + }, + "title": "Archive Wallet Requests", + "type": "array" + } + }, + "required": [ + "archive_wallet_requests" + ], + "title": "ArchiveWalletsRequestContainer", + "type": "object" + } + }, + "properties": { + "archive_wallet_requests": { + "$ref": "#/$defs/ArchiveWalletsRequestContainer" + } + }, + "required": [ + "archive_wallet_requests" + ], + "title": "archive_walletsArguments", + "type": "object" + } + }, + { + "name": "unarchive_wallets", + "description": "\n Unarchive wallets.\n \n Expects a list of wallet names, returns a list of WalletArchiveOrUnarchiveResponse.\n ", + "inputSchema": { + "$defs": { + "UnarchiveWalletRequestContainer": { + "properties": { + "unarchive_wallet_requests": { + "items": { + "$ref": "#/$defs/UnarchiveWalletsRequest" + }, + "title": "Unarchive Wallet Requests", + "type": "array" + } + }, + "required": [ + "unarchive_wallet_requests" + ], + "title": "UnarchiveWalletRequestContainer", + "type": "object" + }, + "UnarchiveWalletsRequest": { + "properties": { + "wallet": { + "description": "Name of the wallet to unarchive", + "title": "Wallet", + "type": "string" + } + }, + "required": [ + "wallet" + ], + "title": "UnarchiveWalletsRequest", + "type": "object" + } + }, + "properties": { + "unarchive_wallet_requests": { + "$ref": "#/$defs/UnarchiveWalletRequestContainer" + } + }, + "required": [ + "unarchive_wallet_requests" + ], + "title": "unarchive_walletsArguments", + "type": "object" + } + }, + { + "name": "create_groups", + "description": "\n Create new wallet groups.\n \n Expects a list of group names, returns a list of CreateGroupResponse.\n ", + "inputSchema": { + "$defs": { + "CreateGroupsRequest": { + "properties": { + "name": { + "description": "Name of the group to create", + "title": "Name", + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "CreateGroupsRequest", + "type": "object" + }, + "CreateGroupsRequestContainer": { + "properties": { + "create_groups_requests": { + "items": { + "$ref": "#/$defs/CreateGroupsRequest" + }, + "title": "Create Groups Requests", + "type": "array" + } + }, + "required": [ + "create_groups_requests" + ], + "title": "CreateGroupsRequestContainer", + "type": "object" + } + }, + "properties": { + "create_groups_requests": { + "$ref": "#/$defs/CreateGroupsRequestContainer" + } + }, + "required": [ + "create_groups_requests" + ], + "title": "create_groupsArguments", + "type": "object" + } + }, + { + "name": "add_wallets_to_group", + "description": "\n Add wallets to a specified group.\n \n Expects the group name and a list of wallet names, returns a list of AddWalletToGroupResponse.\n ", + "inputSchema": { + "$defs": { + "AddWalletToGroupRequest": { + "properties": { + "group": { + "description": "Name of the group to add wallets to", + "title": "Group", + "type": "string" + }, + "wallet": { + "description": "Name of the wallet to add to the group", + "title": "Wallet", + "type": "string" + } + }, + "required": [ + "group", + "wallet" + ], + "title": "AddWalletToGroupRequest", + "type": "object" + }, + "AddWalletToGroupRequestContainer": { + "properties": { + "add_wallet_to_group_requests": { + "items": { + "$ref": "#/$defs/AddWalletToGroupRequest" + }, + "title": "Add Wallet To Group Requests", + "type": "array" + } + }, + "required": [ + "add_wallet_to_group_requests" + ], + "title": "AddWalletToGroupRequestContainer", + "type": "object" + } + }, + "properties": { + "add_wallet_to_group_requests": { + "$ref": "#/$defs/AddWalletToGroupRequestContainer" + } + }, + "required": [ + "add_wallet_to_group_requests" + ], + "title": "add_wallets_to_groupArguments", + "type": "object" + } + }, + { + "name": "archive_wallet_group", + "description": "\n Archive wallet groups.\n \n Expects a list of group names, returns a list of GroupArchiveOrUnarchiveResponse.\n ", + "inputSchema": { + "$defs": { + "ArchiveWalletGroupRequest": { + "properties": { + "group_name": { + "description": "Name of the group to archive", + "title": "Group Name", + "type": "string" + } + }, + "required": [ + "group_name" + ], + "title": "ArchiveWalletGroupRequest", + "type": "object" + }, + "ArchiveWalletGroupRequestContainer": { + "properties": { + "archive_wallet_group_requests": { + "items": { + "$ref": "#/$defs/ArchiveWalletGroupRequest" + }, + "title": "Archive Wallet Group Requests", + "type": "array" + } + }, + "required": [ + "archive_wallet_group_requests" + ], + "title": "ArchiveWalletGroupRequestContainer", + "type": "object" + } + }, + "properties": { + "archive_wallet_group_requests": { + "$ref": "#/$defs/ArchiveWalletGroupRequestContainer" + } + }, + "required": [ + "archive_wallet_group_requests" + ], + "title": "archive_wallet_groupArguments", + "type": "object" + } + }, + { + "name": "unarchive_wallet_group", + "description": "\n Unarchive wallet groups.\n \n Expects a list of group names, returns a list of GroupArchiveOrUnarchiveResponse.\n ", + "inputSchema": { + "$defs": { + "UnarchiveWalletGroupRequest": { + "properties": { + "group_name": { + "description": "Name of the group to unarchive", + "title": "Group Name", + "type": "string" + } + }, + "required": [ + "group_name" + ], + "title": "UnarchiveWalletGroupRequest", + "type": "object" + }, + "UnarchiveWalletGroupRequestContainer": { + "properties": { + "unarchive_wallet_group_requests": { + "items": { + "$ref": "#/$defs/UnarchiveWalletGroupRequest" + }, + "title": "Unarchive Wallet Group Requests", + "type": "array" + } + }, + "required": [ + "unarchive_wallet_group_requests" + ], + "title": "UnarchiveWalletGroupRequestContainer", + "type": "object" + } + }, + "properties": { + "unarchive_wallet_group_requests": { + "$ref": "#/$defs/UnarchiveWalletGroupRequestContainer" + } + }, + "required": [ + "unarchive_wallet_group_requests" + ], + "title": "unarchive_wallet_groupArguments", + "type": "object" + } + }, + { + "name": "remove_wallets_from_group", + "description": "\n Remove wallets from a specified group.\n \n Expects the group name and a list of wallet names, returns a list of RemoveWalletFromGroupResponse.\n ", + "inputSchema": { + "$defs": { + "RemoveWalletsFromGroupRequest": { + "properties": { + "group": { + "description": "Name of the group to remove wallets from", + "title": "Group", + "type": "string" + }, + "wallet": { + "description": "List of wallet names to remove from the group", + "title": "Wallet", + "type": "string" + } + }, + "required": [ + "group", + "wallet" + ], + "title": "RemoveWalletsFromGroupRequest", + "type": "object" + }, + "RemoveWalletsFromGroupRequestContainer": { + "properties": { + "remove_wallets_from_group_requests": { + "items": { + "$ref": "#/$defs/RemoveWalletsFromGroupRequest" + }, + "title": "Remove Wallets From Group Requests", + "type": "array" + } + }, + "required": [ + "remove_wallets_from_group_requests" + ], + "title": "RemoveWalletsFromGroupRequestContainer", + "type": "object" + } + }, + "properties": { + "remove_wallets_from_group_requests": { + "$ref": "#/$defs/RemoveWalletsFromGroupRequestContainer" + } + }, + "required": [ + "remove_wallets_from_group_requests" + ], + "title": "remove_wallets_from_groupArguments", + "type": "object" + } + }, + { + "name": "transfer_tokens", + "description": "\n Transfer tokens from one wallet to another.\n \n Expects a TransferTokensRequestContainer, returns a list of TransferTokenResponse.\n ", + "inputSchema": { + "$defs": { + "TransferTokensRequest": { + "properties": { + "from_wallet": { + "description": "name of the wallet to transfer tokens from", + "title": "From Wallet", + "type": "string" + }, + "to_wallet_address": { + "description": "public address of the wallet to transfer tokens to. Use `get_user_wallets_and_group_list` if you only have a wallet name", + "title": "To Wallet Address", + "type": "string" + }, + "token": { + "description": "public contract address of the token to transfer. To get the address from a token symbol use `get_token_details`", + "title": "Token", + "type": "string" + }, + "amount": { + "description": "amount of tokens to transfer", + "title": "Amount", + "type": "number" + } + }, + "required": [ + "from_wallet", + "to_wallet_address", + "token", + "amount" + ], + "title": "TransferTokensRequest", + "type": "object" + }, + "TransferTokensRequestContainer": { + "properties": { + "transfer_tokens_requests": { + "items": { + "$ref": "#/$defs/TransferTokensRequest" + }, + "title": "Transfer Tokens Requests", + "type": "array" + } + }, + "required": [ + "transfer_tokens_requests" + ], + "title": "TransferTokensRequestContainer", + "type": "object" + } + }, + "properties": { + "transfer_tokens_requests": { + "$ref": "#/$defs/TransferTokensRequestContainer" + } + }, + "required": [ + "transfer_tokens_requests" + ], + "title": "transfer_tokensArguments", + "type": "object" + } + }, + { + "name": "create_dca_order", + "description": "\n Create a DCA order.\n \n Expects a DCAOrderRequestContainer, returns a list of DCAOrderResponse.\n ", + "inputSchema": { + "$defs": { + "DCAOrderRequest": { + "properties": { + "wallet": { + "description": "name of the wallet", + "title": "Wallet", + "type": "string" + }, + "input_token": { + "description": "public address of the input token. To get the address from a token symbol use `get_token_details`", + "title": "Input Token", + "type": "string" + }, + "output_token": { + "description": "public address of the output token. To get the address from a token symbol use `get_token_details`", + "title": "Output Token", + "type": "string" + }, + "amount": { + "description": "total amount of input token to invest", + "title": "Amount", + "type": "number" + }, + "cron_expression": { + "description": "cron expression for the DCA worker execution frequency", + "title": "Cron Expression", + "type": "string" + }, + "strategy_duration_unit": { + "description": "unit of the duration of the DCA order", + "enum": [ + "MINUTE", + "HOUR", + "DAY", + "WEEK", + "MONTH", + "YEAR" + ], + "title": "Strategy Duration Unit", + "type": "string" + }, + "strategy_duration": { + "description": "Total running time of the DCA order given in strategy duration units, should be more than 0", + "title": "Strategy Duration", + "type": "integer" + }, + "execution_type": { + "description": "set to SINGLE only if the user is asking for a single scheduled order, MULTIPLE if it is a true DCA", + "enum": [ + "MULTIPLE", + "SINGLE" + ], + "title": "Execution Type", + "type": "string" + }, + "token_address_watcher": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "If the DCA is conditional, public address of the token to watch.", + "title": "Token Address Watcher" + }, + "watch_field": { + "anyOf": [ + { + "enum": [ + "liquidity", + "marketCap", + "price" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "If the DCA is conditional, field to watch for the condition", + "title": "Watch Field" + }, + "delta_type": { + "anyOf": [ + { + "enum": [ + "INCREASE", + "DECREASE", + "MOVE", + "MOVE_DAILY", + "AVERAGE_MOVE" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "If the DCA is conditional, the operator of the watch field in the conditional statement", + "title": "Delta Type" + }, + "delta_percentage": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "If the DCA is conditional, percentage of the change to watch for given the delta_type", + "title": "Delta Percentage" + }, + "time_zone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "user's time zone. Defaults to UTC", + "title": "Time Zone" + } + }, + "required": [ + "wallet", + "input_token", + "output_token", + "amount", + "cron_expression", + "strategy_duration_unit", + "strategy_duration", + "execution_type", + "token_address_watcher", + "watch_field", + "delta_type", + "delta_percentage", + "time_zone" + ], + "title": "DCAOrderRequest", + "type": "object" + }, + "DCAOrderRequestContainer": { + "properties": { + "dca_order_requests": { + "items": { + "$ref": "#/$defs/DCAOrderRequest" + }, + "title": "Dca Order Requests", + "type": "array" + } + }, + "required": [ + "dca_order_requests" + ], + "title": "DCAOrderRequestContainer", + "type": "object" + } + }, + "properties": { + "dca_order_requests": { + "$ref": "#/$defs/DCAOrderRequestContainer" + } + }, + "required": [ + "dca_order_requests" + ], + "title": "create_dca_orderArguments", + "type": "object" + } + }, + { + "name": "list_dca_orders", + "description": "\n List all DCA orders.\n \n Returns a list of DCAOrderResponse.\n ", + "inputSchema": { + "$defs": { + "ListDCAOrderRequest": { + "properties": { + "status": { + "anyOf": [ + { + "enum": [ + "COMPLETED", + "OPEN", + "CANCELLED" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "status of the DCA orders, if specified filters the results.", + "title": "Status" + }, + "limit": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": 30, + "description": "number of mostrecent results to return", + "title": "Limit" + } + }, + "required": [ + "status" + ], + "title": "ListDCAOrderRequest", + "type": "object" + } + }, + "properties": { + "list_dca_order_requests": { + "$ref": "#/$defs/ListDCAOrderRequest" + } + }, + "required": [ + "list_dca_order_requests" + ], + "title": "list_dca_ordersArguments", + "type": "object" + } + }, + { + "name": "cancel_dca_order", + "description": "\n Create a DCA order.\n\n Note: Make a single or multiple dca_order_requests \n ", + "inputSchema": { + "$defs": { + "CancelDCAOrderRequest": { + "properties": { + "dca_order_id": { + "description": "id of the DCA order", + "title": "Dca Order Id", + "type": "string" + } + }, + "required": [ + "dca_order_id" + ], + "title": "CancelDCAOrderRequest", + "type": "object" + }, + "CancelDCAOrderRequestContainer": { + "properties": { + "cancel_dca_order_requests": { + "items": { + "$ref": "#/$defs/CancelDCAOrderRequest" + }, + "title": "Cancel Dca Order Requests", + "type": "array" + } + }, + "required": [ + "cancel_dca_order_requests" + ], + "title": "CancelDCAOrderRequestContainer", + "type": "object" + } + }, + "properties": { + "cancel_dca_order_requests": { + "$ref": "#/$defs/CancelDCAOrderRequestContainer" + } + }, + "required": [ + "cancel_dca_order_requests" + ], + "title": "cancel_dca_orderArguments", + "type": "object" + } + }, + { + "name": "create_order", + "description": "\n Create a order. Can be a limit or stop loss order\n \n Expects a CreateOrderRequestContainer, returns a CreateOrderResponseContainer.\n ", + "inputSchema": { + "$defs": { + "CreateOrderRequest": { + "properties": { + "wallet": { + "description": "name of the wallet", + "title": "Wallet", + "type": "string" + }, + "input_token": { + "description": "public address of the input token", + "title": "Input Token", + "type": "string" + }, + "output_token": { + "description": "public address of the output token", + "title": "Output Token", + "type": "string" + }, + "amount": { + "description": "amount of input token to invest", + "title": "Amount", + "type": "number" + }, + "strategy_duration": { + "description": "duration of the order", + "title": "Strategy Duration", + "type": "integer" + }, + "strategy_duration_unit": { + "description": "unit of the duration of the order", + "enum": [ + "MINUTE", + "HOUR", + "DAY", + "WEEK", + "MONTH", + "YEAR" + ], + "title": "Strategy Duration Unit", + "type": "string" + }, + "stop_loss_watch_field": { + "anyOf": [ + { + "enum": [ + "liquidity", + "marketCap", + "price" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "only needed when order_type field is STOP_LOSS or STOP_LIMIT", + "title": "Stop Loss Watch Field" + }, + "limit_watch_field": { + "anyOf": [ + { + "enum": [ + "liquidity", + "marketCap", + "price" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "only needed when order_type field is LIMIT or STOP_LIMIT", + "title": "Limit Watch Field" + }, + "token_address_watcher": { + "description": "public address of the token to watch", + "title": "Token Address Watcher", + "type": "string" + }, + "stop_loss_delta_percentage": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "percentage for stop loss delta. only needed when order_type field is STOP_LOSS or STOP_LIMIT", + "title": "Stop Loss Delta Percentage" + }, + "limit_delta_percentage": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "percentage for limit delta. only needed when order_type field is LIMIT or STOP_LIMIT", + "title": "Limit Delta Percentage" + }, + "order_type": { + "description": "type of the order. Wether it is a limit order, stop loss order or stop limit order", + "enum": [ + "LIMIT", + "STOP_LOSS", + "STOP_LIMIT" + ], + "title": "Order Type", + "type": "string" + } + }, + "required": [ + "wallet", + "input_token", + "output_token", + "amount", + "strategy_duration", + "strategy_duration_unit", + "stop_loss_watch_field", + "limit_watch_field", + "token_address_watcher", + "stop_loss_delta_percentage", + "limit_delta_percentage", + "order_type" + ], + "title": "CreateOrderRequest", + "type": "object" + }, + "CreateOrderRequestContainer": { + "properties": { + "create_order_requests": { + "items": { + "$ref": "#/$defs/CreateOrderRequest" + }, + "title": "Create Order Requests", + "type": "array" + } + }, + "required": [ + "create_order_requests" + ], + "title": "CreateOrderRequestContainer", + "type": "object" + } + }, + "properties": { + "create_order_requests": { + "$ref": "#/$defs/CreateOrderRequestContainer" + } + }, + "required": [ + "create_order_requests" + ], + "title": "create_orderArguments", + "type": "object" + } + }, + { + "name": "cancel_order", + "description": "\n Cancel a limit or stop loss order.\n \n Expects a CancelOrderRequestContainer, returns a CancelOrderResponseContainer.\n ", + "inputSchema": { + "$defs": { + "CancelOrderRequest": { + "properties": { + "order_id": { + "description": "id of the limit order", + "title": "Order Id", + "type": "string" + } + }, + "required": [ + "order_id" + ], + "title": "CancelOrderRequest", + "type": "object" + }, + "CancelOrderRequestContainer": { + "properties": { + "cancel_order_requests": { + "items": { + "$ref": "#/$defs/CancelOrderRequest" + }, + "title": "Cancel Order Requests", + "type": "array" + } + }, + "required": [ + "cancel_order_requests" + ], + "title": "CancelOrderRequestContainer", + "type": "object" + } + }, + "properties": { + "cancel_order_requests": { + "$ref": "#/$defs/CancelOrderRequestContainer" + } + }, + "required": [ + "cancel_order_requests" + ], + "title": "cancel_orderArguments", + "type": "object" + } + }, + { + "name": "stake_quote", + "description": "\n Retrieve a stake quote.\n \n Expects a StakeQuoteRequestContainer, returns a SwapQuoteRequestContainer.\n ", + "inputSchema": { + "$defs": { + "StakeQuoteRequest": { + "properties": { + "from_wallet": { + "description": "The name of the wallet that input_token is in.", + "title": "From Wallet", + "type": "string" + }, + "input_token": { + "default": "So11111111111111111111111111111111111111112", + "title": "Input Token", + "type": "string" + }, + "output_token": { + "description": "the public mint address of the output liquid staking derivative token to stake.", + "title": "Output Token", + "type": "string" + }, + "input_amount": { + "description": "input amount to swap", + "title": "Input Amount", + "type": "number" + } + }, + "required": [ + "from_wallet", + "output_token", + "input_amount" + ], + "title": "StakeQuoteRequest", + "type": "object" + }, + "StakeQuoteRequestContainer": { + "properties": { + "stake_quote_requests": { + "items": { + "$ref": "#/$defs/StakeQuoteRequest" + }, + "title": "Stake Quote Requests", + "type": "array" + } + }, + "required": [ + "stake_quote_requests" + ], + "title": "StakeQuoteRequestContainer", + "type": "object" + } + }, + "properties": { + "stake_quote_requests": { + "$ref": "#/$defs/StakeQuoteRequestContainer" + } + }, + "required": [ + "stake_quote_requests" + ], + "title": "stake_quoteArguments", + "type": "object" + } + }, + { + "name": "unstake_quote", + "description": "\n Retrieve an unstake quote.\n\n Expects a UnstakeQuoteRequestContainer, returns a SwapQuoteRequestContainer.\n ", + "inputSchema": { + "$defs": { + "UnstakeQuoteRequest": { + "properties": { + "from_wallet": { + "description": "The name of the wallet that input_token is in.", + "title": "From Wallet", + "type": "string" + }, + "input_token": { + "description": "the public mint address of the input liquid staking derivative token to unstake.", + "title": "Input Token", + "type": "string" + }, + "output_token": { + "default": "So11111111111111111111111111111111111111112", + "title": "Output Token", + "type": "string" + }, + "input_amount": { + "description": "input amount to swap", + "title": "Input Amount", + "type": "number" + } + }, + "required": [ + "from_wallet", + "input_token", + "input_amount" + ], + "title": "UnstakeQuoteRequest", + "type": "object" + }, + "UnstakeQuoteRequestContainer": { + "properties": { + "unstake_quote_requests": { + "items": { + "$ref": "#/$defs/UnstakeQuoteRequest" + }, + "title": "Unstake Quote Requests", + "type": "array" + } + }, + "required": [ + "unstake_quote_requests" + ], + "title": "UnstakeQuoteRequestContainer", + "type": "object" + } + }, + "properties": { + "unstake_quote_requests": { + "$ref": "#/$defs/UnstakeQuoteRequestContainer" + } + }, + "required": [ + "unstake_quote_requests" + ], + "title": "unstake_quoteArguments", + "type": "object" + } + }, + { + "name": "stake_transaction", + "description": "\n Execute a stake transaction.\n \n Expects a StakeTransactionRequestContainer, returns a SwapTransactionRequestContainer.\n ", + "inputSchema": { + "$defs": { + "StakeTransactionRequest": { + "properties": { + "transaction_id": { + "description": "unique id of the generated stake quote", + "title": "Transaction Id", + "type": "string" + } + }, + "required": [ + "transaction_id" + ], + "title": "StakeTransactionRequest", + "type": "object" + }, + "StakeTransactionRequestContainer": { + "properties": { + "stake_transaction_requests": { + "items": { + "$ref": "#/$defs/StakeTransactionRequest" + }, + "title": "Stake Transaction Requests", + "type": "array" + } + }, + "required": [ + "stake_transaction_requests" + ], + "title": "StakeTransactionRequestContainer", + "type": "object" + } + }, + "properties": { + "stake_transaction_requests": { + "$ref": "#/$defs/StakeTransactionRequestContainer" + } + }, + "required": [ + "stake_transaction_requests" + ], + "title": "stake_transactionArguments", + "type": "object" + } + }, + { + "name": "unstake_transaction", + "description": "\n Execute an unstake transaction.\n \n Expects a UnstakeTransactionRequestContainer, returns a SwapTransactionRequestContainer.\n ", + "inputSchema": { + "$defs": { + "UnstakeTransactionRequest": { + "properties": { + "transaction_id": { + "description": "unique id of the generated unstake quote", + "title": "Transaction Id", + "type": "string" + } + }, + "required": [ + "transaction_id" + ], + "title": "UnstakeTransactionRequest", + "type": "object" + }, + "UnstakeTransactionRequestContainer": { + "properties": { + "unstake_transaction_requests": { + "items": { + "$ref": "#/$defs/UnstakeTransactionRequest" + }, + "title": "Unstake Transaction Requests", + "type": "array" + } + }, + "required": [ + "unstake_transaction_requests" + ], + "title": "UnstakeTransactionRequestContainer", + "type": "object" + } + }, + "properties": { + "unstake_transaction_requests": { + "$ref": "#/$defs/UnstakeTransactionRequestContainer" + } + }, + "required": [ + "unstake_transaction_requests" + ], + "title": "unstake_transactionArguments", + "type": "object" + } + }, + { + "name": "get_top_trending_tokens", + "description": "\n Get the top trending tokens in a particular time frame. Great for comparing market cap or volume.\n \n Expects a TopTrendingTokensRequest, returns a list of tokens with their details.\n ", + "inputSchema": { + "$defs": { + "TopTrendingTokensRequest": { + "properties": { + "time_frame": { + "default": "24h", + "description": "Time frame to get the top trending tokens", + "enum": [ + "5m", + "15m", + "30m", + "1h", + "2h", + "3h", + "4h", + "5h", + "6h", + "12h", + "24h" + ], + "title": "Time Frame", + "type": "string" + } + }, + "title": "TopTrendingTokensRequest", + "type": "object" + } + }, + "properties": { + "top_trending_tokens_requests": { + "$ref": "#/$defs/TopTrendingTokensRequest" + } + }, + "required": [ + "top_trending_tokens_requests" + ], + "title": "get_top_trending_tokensArguments", + "type": "object" + } + }, + { + "name": "get_stake_balances", + "description": "\n Get the balance of staked SOL (jupSOL).\n \n Returns a StakeBalanceResponse.\n ", + "inputSchema": { + "properties": {}, + "title": "get_stake_balancesArguments", + "type": "object" + } + }, + { + "name": "rename_wallets", + "description": "\n Rename wallets.\n \n Expects a RenameWalletRequestContainer, returns a list.\n ", + "inputSchema": { + "$defs": { + "RenameWalletRequest": { + "properties": { + "wallet": { + "description": "Name of the wallet to rename", + "title": "Wallet", + "type": "string" + }, + "new_name": { + "description": "New name of the wallet", + "title": "New Name", + "type": "string" + } + }, + "required": [ + "wallet", + "new_name" + ], + "title": "RenameWalletRequest", + "type": "object" + }, + "RenameWalletRequestContainer": { + "properties": { + "rename_wallet_requests": { + "items": { + "$ref": "#/$defs/RenameWalletRequest" + }, + "title": "Rename Wallet Requests", + "type": "array" + } + }, + "required": [ + "rename_wallet_requests" + ], + "title": "RenameWalletRequestContainer", + "type": "object" + } + }, + "properties": { + "rename_wallet_requests": { + "$ref": "#/$defs/RenameWalletRequestContainer" + } + }, + "required": [ + "rename_wallet_requests" + ], + "title": "rename_walletsArguments", + "type": "object" + } + }, + { + "name": "get_token_candle_data", + "description": "\n Get candle data about any token for analysis.\n\n Expects a CandleStickRequest, returns a list of candle sticks.\n ", + "inputSchema": { + "$defs": { + "CandleStickRequest": { + "properties": { + "token_address": { + "description": "Public mint address of the token. To get the address from a token symbol use `get_token_details`", + "title": "Token Address", + "type": "string" + }, + "time_interval": { + "default": "1h", + "description": "Time frame to get the candle sticks. Use larger candle time frames over larger time windows to keep returned candles minimal", + "enum": [ + "1s", + "5s", + "15s", + "1m", + "3m", + "5m", + "15m", + "30m", + "1h", + "2h", + "4h", + "6h", + "8h", + "12h", + "1d", + "3d", + "1w", + "1mn" + ], + "title": "Time Interval", + "type": "string" + }, + "time_from": { + "description": "The time from which to start the candle data in ISO 8601 format. Attempt to change this to keep number of candles returned under 64.", + "title": "Time From", + "type": "string" + }, + "time_to": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The time to end the candle data in ISO 8601 format. Use only for historic analysis.", + "title": "Time To" + }, + "market_cap": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "Whether to return the marketcap of the token instead of the price", + "title": "Market Cap" + } + }, + "required": [ + "token_address", + "time_from" + ], + "title": "CandleStickRequest", + "type": "object" + } + }, + "properties": { + "candle_stick_requests": { + "$ref": "#/$defs/CandleStickRequest" + } + }, + "required": [ + "candle_stick_requests" + ], + "title": "get_token_candle_dataArguments", + "type": "object" + } + }, + { + "name": "send_key_to_telegram", + "description": "\n Send the mnemonic or private key to telegram.\n ", + "inputSchema": { + "$defs": { + "PrivateKeyRequest": { + "properties": { + "wallet": { + "description": "Name of the wallet to get the mnemonic or private key for", + "title": "Wallet", + "type": "string" + }, + "key_type": { + "description": "Whether to return the private or mnemonic key", + "enum": [ + "PRIVATE_KEY", + "MNEMONIC" + ], + "title": "Key Type", + "type": "string" + } + }, + "required": [ + "wallet", + "key_type" + ], + "title": "PrivateKeyRequest", + "type": "object" + } + }, + "properties": { + "private_key_request": { + "$ref": "#/$defs/PrivateKeyRequest" + } + }, + "required": [ + "private_key_request" + ], + "title": "send_key_to_telegramArguments", + "type": "object" + } + } + ], + "prompts": [ + { + "name": "login_prompt", + "description": "\n A sample prompt to ask the user for their access token after providing an email.\n ", + "arguments": [ + { + "name": "email", + "description": "email address of the user", + "required": true + } + ] + } + ], + "resources": [], + "is_official": false, + "docker_url": "https://hub.docker.com/r/mcp/armor-crypto" +} diff --git a/mcp-registry/servers/atlas-docs-mcp.json b/mcp-registry/servers/atlas-docs-mcp.json new file mode 100644 index 00000000..89870e1c --- /dev/null +++ b/mcp-registry/servers/atlas-docs-mcp.json @@ -0,0 +1,188 @@ +{ + "display_name": "Atlas Docs MCP Server", + "license": "MIT", + "tags": [ + "documentation", + "MCP", + "Model Context Protocol", + "libraries", + "frameworks", + "AI assistants", + "LLM", + "developer tools" + ], + "installations": { + "npm": { + "type": "npm", + "command": "npx", + "args": [ + "-y", + "@cartographai/atlas-docs-mcp" + ], + "description": "Atlas Docs MCP server installation for MCP clients" + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "ATLAS_API_URL", + "mcp/atlas-docs" + ], + "env": { + "ATLAS_API_URL": "https://atlas.cartograph.app/api" + } + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "Use the tools to check the documentation for Astro to ensure that you use the library correctly." + }, + { + "title": "", + "description": "", + "prompt": "Can you search the ElevenLabs documentation for information about text-to-speech?" + }, + { + "title": "", + "description": "", + "prompt": "Show me the full documentation for Svelte." + }, + { + "title": "", + "description": "", + "prompt": "List all the documentation sets available through Atlas Docs." + }, + { + "title": "", + "description": "", + "prompt": "Get the documentation index for Prisma." + }, + { + "title": "", + "description": "", + "prompt": "I need to implement authentication with Stripe, can you check the docs for me?" + }, + { + "title": "", + "description": "", + "prompt": "Find information about routing in TanStack-Router documentation." + } + ], + "name": "atlas-docs-mcp", + "repository": { + "type": "git", + "url": "https://github.com/CartographAI/atlas-docs-mcp" + }, + "homepage": "https://github.com/CartographAI/atlas-docs-mcp", + "author": { + "name": "CartographAI" + }, + "description": "A [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) server that provides AI assistants with documentation for libraries and frameworks.", + "categories": [ + "Knowledge Base" + ], + "tools": [ + { + "name": "list_docs", + "description": "Lists all available documentation libraries and frameworks. Use this as your first step to discover available documentation sets. Returns name, description and source url for each documentation set. Required before using other documentation tools since you need the docName.", + "inputSchema": { + "type": "object", + "properties": {}, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "search_docs", + "description": "Searches a documentation set for specific content. Use this to find pages containing particular keywords, concepts, or topics. Returns matching pages ranked by relevance with their paths and descriptions. Follow up with get_docs_page to get full content.", + "inputSchema": { + "type": "object", + "properties": { + "docName": { + "type": "string", + "description": "Name of the documentation set" + }, + "query": { + "type": "string", + "description": "Search query to find relevant pages within the documentation set" + } + }, + "required": [ + "docName", + "query" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "get_docs_index", + "description": "Retrieves a condensed, LLM-friendly index of the pages in a documentation set. Use this for initial exploration to understand what's covered and identify relevant pages. Returns a markdown page with a list of available pages. Follow up with get_docs_page to get full content.", + "inputSchema": { + "type": "object", + "properties": { + "docName": { + "type": "string", + "description": "Name of the documentation set" + } + }, + "required": [ + "docName" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "get_docs_page", + "description": "Retrieves a specific documentation page's content using its relative path. Use this to get detailed information about a known topic, after identifying the relevant page through get_docs_index or search_docs. Returns the complete content of a single documentation page.", + "inputSchema": { + "type": "object", + "properties": { + "docName": { + "type": "string", + "description": "Name of the documentation set" + }, + "pagePath": { + "type": "string", + "description": "The root-relative path of the specific documentation page (e.g., '/guides/getting-started', '/api/authentication')" + } + }, + "required": [ + "docName", + "pagePath" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "get_docs_full", + "description": "Retrieves the complete documentation content in a single consolidated file. Use this when you need comprehensive knowledge or need to analyze the full documentation context. Returns a large volume of text - consider using get_docs_page or search_docs for targeted information.", + "inputSchema": { + "type": "object", + "properties": { + "docName": { + "type": "string", + "description": "Name of the documentation set" + } + }, + "required": [ + "docName" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + } + ], + "prompts": [], + "resources": [], + "is_official": false, + "docker_url": "https://hub.docker.com/r/mcp/atlas-docs" +} diff --git a/mcp-registry/servers/aws-kb-retrieval.json b/mcp-registry/servers/aws-kb-retrieval.json index f4bc52d7..5b93024f 100644 --- a/mcp-registry/servers/aws-kb-retrieval.json +++ b/mcp-registry/servers/aws-kb-retrieval.json @@ -101,5 +101,6 @@ } } ], - "is_official": true -} \ No newline at end of file + "is_official": true, + "docker_url": "https://hub.docker.com/r/mcp/aws-kb-retrieval-server" +} diff --git a/mcp-registry/servers/basic-memory.json b/mcp-registry/servers/basic-memory.json index 9ff9f3ef..e4e73f9b 100644 --- a/mcp-registry/servers/basic-memory.json +++ b/mcp-registry/servers/basic-memory.json @@ -22,6 +22,16 @@ "basic-memory", "mcp" ] + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "mcp/basic-memory" + ] } }, "tags": [ @@ -445,5 +455,6 @@ "type": "object" } } - ] -} \ No newline at end of file + ], + "docker_url": "https://hub.docker.com/r/mcp/basic-memory" +} diff --git a/mcp-registry/servers/brave-search.json b/mcp-registry/servers/brave-search.json index 86c59ba4..210d6ebb 100644 --- a/mcp-registry/servers/brave-search.json +++ b/mcp-registry/servers/brave-search.json @@ -116,5 +116,6 @@ } } ], - "is_official": true -} \ No newline at end of file + "is_official": true, + "docker_url": "https://hub.docker.com/r/mcp/brave-search" +} diff --git a/mcp-registry/servers/dappier.json b/mcp-registry/servers/dappier.json new file mode 100644 index 00000000..e74c9073 --- /dev/null +++ b/mcp-registry/servers/dappier.json @@ -0,0 +1,198 @@ +{ + "display_name": "Dappier MCP Server", + "license": "MIT", + "tags": [ + "MCP", + "Model Context Protocol", + "real-time data", + "web search", + "financial data", + "stock market", + "news", + "AI recommendations", + "content discovery" + ], + "installations": { + "uvx": { + "type": "uvx", + "command": "uvx", + "args": [ + "dappier-mcp" + ], + "env": { + "DAPPIER_API_KEY": "${DAPPIER_API_KEY}" + }, + "description": "Run with uvx after installing dappier-mcp" + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "DAPPIER_API_KEY", + "mcp/dappier" + ], + "env": { + "DAPPIER_API_KEY": "${DAPPIER_API_KEY}" + } + } + }, + "arguments": { + "DAPPIER_API_KEY": { + "description": "Dappier API key", + "required": true, + "example": "" + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "How is the weather today in Austin, TX?" + }, + { + "title": "", + "description": "", + "prompt": "What is the latest news for Meta?" + }, + { + "title": "", + "description": "", + "prompt": "What is the stock price for AAPL?" + }, + { + "title": "", + "description": "", + "prompt": "Show me the latest sports news." + }, + { + "title": "", + "description": "", + "prompt": "Find trending articles on sustainable living." + }, + { + "title": "", + "description": "", + "prompt": "Get pet care recommendations from IHeartDogs AI." + } + ], + "name": "dappier", + "repository": { + "type": "git", + "url": "https://github.com/dappierai/dappier-mcp" + }, + "homepage": "https://github.com/dappierai/dappier-mcp", + "author": { + "name": "dappierai" + }, + "description": "Dappier MCP Server connects any LLM or AI to real-time, proprietary data from trusted sources, enabling AI to become an expert by accessing specialized models like web search, news, sports, finance, crypto, and premium publisher content.", + "categories": [ + "Knowledge Base" + ], + "tools": [ + { + "name": "dappier_real_time_search", + "description": "\n Retrieve real-time search data from Dappier by processing an AI model that supports two key capabilities:\n\n - Real-Time Web Search: \n Access the latest news, stock market data, weather, travel information, deals, and more using model `am_01j06ytn18ejftedz6dyhz2b15`. \n Use this model when no stock ticker symbol is provided.\n\n - Stock Market Data: \n Retrieve real-time financial news, stock prices, and trade updates using model `am_01j749h8pbf7ns8r1bq9s2evrh`. \n Use this model only when a stock ticker symbol is provided.\n\n Based on the provided `ai_model_id`, the tool selects the appropriate model and returns search results.\n ", + "inputSchema": { + "properties": { + "query": { + "description": "The search query to retrieve real-time information.", + "title": "Query", + "type": "string" + }, + "ai_model_id": { + "description": "The AI model ID to use for the query.\n\nAvailable AI Models:\n- am_01j06ytn18ejftedz6dyhz2b15: (Real-Time Data) Access real-time Google web search results, including the latest news, stock market data, news, weather, travel, deals, and more. Use this model when no stock ticker symbol is provided.\n- am_01j749h8pbf7ns8r1bq9s2evrh: (Stock Market Data) Access real-time financial news, stock prices, and trades from Polygon.io, with AI-powered insights and up-to-the-minute updates. Use this model only when a stock ticker symbol is provided.\n\n", + "enum": [ + "am_01j06ytn18ejftedz6dyhz2b15", + "am_01j749h8pbf7ns8r1bq9s2evrh" + ], + "title": "Ai Model Id", + "type": "string" + } + }, + "required": [ + "query", + "ai_model_id" + ], + "title": "dappier_real_time_searchArguments", + "type": "object" + } + }, + { + "name": "dappier_ai_recommendations", + "description": "\n Fetch AI-powered recommendations from Dappier by processing the provided query with a selected data model that tailors results to specific interests.\n\n - **Sports News (dm_01j0pb465keqmatq9k83dthx34):** \n Get real-time news, updates, and personalized content from top sports sources.\n\n - **Lifestyle News (dm_01j0q82s4bfjmsqkhs3ywm3x6y):** \n Access current lifestyle updates, analysis, and insights from leading lifestyle publications.\n\n - **iHeartDogs AI (dm_01j1sz8t3qe6v9g8ad102kvmqn):** \n Tap into a dog care expert with access to thousands of articles covering pet health, behavior, grooming, and ownership.\n\n - **iHeartCats AI (dm_01j1sza0h7ekhaecys2p3y0vmj):** \n Utilize a cat care specialist that provides comprehensive content on cat health, behavior, and lifestyle.\n\n - **GreenMonster (dm_01j5xy9w5sf49bm6b1prm80m27):** \n Receive guidance for making conscious and compassionate choices benefiting people, animals, and the planet.\n\n - **WISH-TV AI (dm_01jagy9nqaeer9hxx8z1sk1jx6):** \n Get recommendations covering sports, breaking news, politics, multicultural updates, and more.\n\n Based on the chosen `data_model_id`, the tool processes the input query and returns a formatted summary including article titles, summaries, images, source URLs, publication dates, and relevance scores.\n ", + "inputSchema": { + "properties": { + "query": { + "description": "The input string for AI-powered content recommendations.", + "title": "Query", + "type": "string" + }, + "data_model_id": { + "description": "The data model ID to use for recommendations.\n\nAvailable Data Models:\n- dm_01j0pb465keqmatq9k83dthx34: (Sports News) Real-time news, updates, and personalized content from top sports sources like Sportsnaut, Forever Blueshirts, Minnesota Sports Fan, LAFB Network, Bounding Into Sports and Ringside Intel.\n- dm_01j0q82s4bfjmsqkhs3ywm3x6y: (Lifestyle News) Real-time updates, analysis, and personalized content from top sources like The Mix, Snipdaily, Nerdable and Familyproof.\n- dm_01j1sz8t3qe6v9g8ad102kvmqn: (iHeartDogs AI) A dog care expert with access to thousands of articles on health, behavior, lifestyle, grooming, ownership, and more from the industry-leading pet community iHeartDogs.com.\n- dm_01j1sza0h7ekhaecys2p3y0vmj: (iHeartCats AI) A cat care expert with access to thousands of articles on health, behavior, lifestyle, grooming, ownership, and more from the industry-leading pet community iHeartCats.com.\n- dm_01j5xy9w5sf49bm6b1prm80m27: (GreenMonster) A helpful guide to making conscious and compassionate choices that benefit people, animals, and the planet.\n- dm_01jagy9nqaeer9hxx8z1sk1jx6: (WISH-TV AI) Covers sports, politics, breaking news, multicultural news, Hispanic language content, entertainment, health, and education.\n\n", + "enum": [ + "dm_01j0pb465keqmatq9k83dthx34", + "dm_01j0q82s4bfjmsqkhs3ywm3x6y", + "dm_01j1sz8t3qe6v9g8ad102kvmqn", + "dm_01j1sza0h7ekhaecys2p3y0vmj", + "dm_01j5xy9w5sf49bm6b1prm80m27", + "dm_01jagy9nqaeer9hxx8z1sk1jx6" + ], + "title": "Data Model Id", + "type": "string" + }, + "similarity_top_k": { + "default": 9, + "description": "Number of top similar articles to retrieve based on semantic similarity.", + "title": "Similarity Top K", + "type": "integer" + }, + "ref": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The site domain where recommendations should be prioritized.", + "title": "Ref" + }, + "num_articles_ref": { + "default": 0, + "description": "Minimum number of articles to return from the reference domain.", + "title": "Num Articles Ref", + "type": "integer" + }, + "search_algorithm": { + "default": "most_recent", + "description": "The search algorithm to use for retrieving articles.", + "enum": [ + "most_recent", + "semantic", + "most_recent_semantic", + "trending" + ], + "title": "Search Algorithm", + "type": "string" + } + }, + "required": [ + "query", + "data_model_id" + ], + "title": "dappier_ai_recommendationsArguments", + "type": "object" + } + } + ], + "prompts": [], + "resources": [], + "is_official": true, + "docker_url": "https://hub.docker.com/r/mcp/dappier" +} diff --git a/mcp-registry/servers/desktop-commander-mcp.json b/mcp-registry/servers/desktop-commander-mcp.json index a56eb1b9..f843b1f1 100644 --- a/mcp-registry/servers/desktop-commander-mcp.json +++ b/mcp-registry/servers/desktop-commander-mcp.json @@ -22,6 +22,16 @@ "@wonderwhy-er/desktop-commander" ], "description": "Add to claude_desktop_config by hand" + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "mcp/desktop-commander" + ] } }, "examples": [ @@ -429,5 +439,6 @@ ], "prompts": [], "resources": [], - "is_official": false + "is_official": false, + "docker_url": "https://hub.docker.com/r/mcp/desktop-commander" } diff --git a/mcp-registry/servers/doit.json b/mcp-registry/servers/doit.json new file mode 100644 index 00000000..5beccde2 --- /dev/null +++ b/mcp-registry/servers/doit.json @@ -0,0 +1,113 @@ +{ + "display_name": "DoiT MCP Server", + "license": "MIT", + "tags": [ + "DoiT", + "API", + "MCP", + "cloud", + "cost analysis", + "analytics", + "anomaly detection", + "Claude", + "LLM" + ], + "installations": { + "npm": { + "type": "npm", + "command": "npx", + "args": [ + "-y", + "@doitintl/doit-mcp-server@latest" + ], + "env": { + "DOIT_API_KEY": "${DOIT_API_KEY}" + }, + "description": "Cursor IDE manual installation" + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "DOIT_API_KEY", + "mcp/doit" + ], + "env": { + "DOIT_API_KEY": "${DOIT_API_KEY}" + } + } + }, + "arguments": { + "DOIT_API_KEY": { + "description": "Your DoiT API key with appropriate permissions.", + "required": true, + "example": "" + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "What are my Flexsave savings?" + }, + { + "title": "", + "description": "", + "prompt": "What are my top 3 AWS services by cost?" + }, + { + "title": "", + "description": "", + "prompt": "List all my available reports" + }, + { + "title": "", + "description": "", + "prompt": "Show me the results of my 'Monthly Cost Overview' report" + }, + { + "title": "", + "description": "", + "prompt": "What are my recent GCP anomalies?" + }, + { + "title": "", + "description": "", + "prompt": "Show me details about anomaly ABC123" + }, + { + "title": "", + "description": "", + "prompt": "Are there any current cloud incidents affecting my services?" + }, + { + "title": "", + "description": "", + "prompt": "Get details about cloud incident XYZ789" + }, + { + "title": "", + "description": "", + "prompt": "What dimensions are available for my cloud analytics?" + } + ], + "name": "doit", + "repository": { + "type": "git", + "url": "https://github.com/doitintl/doit-mcp-server" + }, + "homepage": "https://github.com/doitintl/doit-mcp-server", + "author": { + "name": "doitintl" + }, + "description": "DoiT MCP Server provides access to the DoiT API. This server enables LLMs like Claude to access DoiT platform data for troubleshooting and analysis.", + "categories": [ + "Web Services" + ], + "is_official": false, + "docker_url": "https://hub.docker.com/r/mcp/doit" +} diff --git a/mcp-registry/servers/duckduckgo-mcp.json b/mcp-registry/servers/duckduckgo-mcp.json index 26dff4c8..f6fed216 100644 --- a/mcp-registry/servers/duckduckgo-mcp.json +++ b/mcp-registry/servers/duckduckgo-mcp.json @@ -17,6 +17,17 @@ "duckduckgo-mcp-server" ], "description": "Run with Claude Desktop" + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "mcp/duckduckgo" + ], + "description": "Run using Docker" } }, "examples": [ @@ -112,5 +123,6 @@ ], "prompts": [], "resources": [], - "is_official": false + "is_official": false, + "docker_url": "https://hub.docker.com/r/mcp/duckduckgo" } diff --git a/mcp-registry/servers/elevenlabs.json b/mcp-registry/servers/elevenlabs.json index de588c10..dfa58390 100644 --- a/mcp-registry/servers/elevenlabs.json +++ b/mcp-registry/servers/elevenlabs.json @@ -36,6 +36,21 @@ "ELEVENLABS_STYLE": "${ELEVENLABS_STYLE}", "ELEVENLABS_OUTPUT_DIR": "${ELEVENLABS_OUTPUT_DIR}" } + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "ELEVENLABS_API_KEY", + "mcp/elevenlabs" + ], + "env": { + "ELEVENLABS_API_KEY": "${ELEVENLABS_API_KEY}" + } } }, "arguments": { @@ -167,5 +182,6 @@ "required": [] } } - ] -} \ No newline at end of file + ], + "docker_url": "https://hub.docker.com/r/mcp/elevenlabs" +} diff --git a/mcp-registry/servers/everart.json b/mcp-registry/servers/everart.json index a8bcada8..7c3afba2 100644 --- a/mcp-registry/servers/everart.json +++ b/mcp-registry/servers/everart.json @@ -82,5 +82,6 @@ } } ], - "is_official": true -} \ No newline at end of file + "is_official": true, + "docker_url": "https://hub.docker.com/r/mcp/everart" +} diff --git a/mcp-registry/servers/everything.json b/mcp-registry/servers/everything.json index 133fda61..2345e1da 100644 --- a/mcp-registry/servers/everything.json +++ b/mcp-registry/servers/everything.json @@ -32,6 +32,17 @@ "env": {}, "description": "Install and run using NPX", "recommended": true + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "mcp/everything" + ], + "description": "Run using Docker" } }, "examples": [ @@ -167,5 +178,6 @@ } } ], - "is_official": true -} \ No newline at end of file + "is_official": true, + "docker_url": "https://hub.docker.com/r/mcp/everything" +} diff --git a/mcp-registry/servers/exa-mcp-server.json b/mcp-registry/servers/exa-mcp-server.json index aff025a7..dcbcf197 100644 --- a/mcp-registry/servers/exa-mcp-server.json +++ b/mcp-registry/servers/exa-mcp-server.json @@ -36,6 +36,22 @@ }, "description": "Run with NPX", "recommended": true + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "EXA_API_KEY", + "mcp/exa" + ], + "env": { + "EXA_API_KEY": "${EXA_API_KEY}" + }, + "description": "Run using Docker" } }, "examples": [ @@ -89,5 +105,6 @@ ], "prompts": [], "resources": [], - "is_official": true + "is_official": true, + "docker_url": "https://hub.docker.com/r/mcp/exa" } diff --git a/mcp-registry/servers/fetch.json b/mcp-registry/servers/fetch.json index c616882d..9e2f5b2a 100644 --- a/mcp-registry/servers/fetch.json +++ b/mcp-registry/servers/fetch.json @@ -81,5 +81,6 @@ "type": "object" } } - ] -} \ No newline at end of file + ], + "docker_url": "https://hub.docker.com/r/mcp/fetch" +} diff --git a/mcp-registry/servers/filesystem.json b/mcp-registry/servers/filesystem.json index 11ae2180..580bd98d 100644 --- a/mcp-registry/servers/filesystem.json +++ b/mcp-registry/servers/filesystem.json @@ -271,5 +271,6 @@ } } ], - "is_official": true -} \ No newline at end of file + "is_official": true, + "docker_url": "https://hub.docker.com/r/mcp/filesystem" +} diff --git a/mcp-registry/servers/firecrawl.json b/mcp-registry/servers/firecrawl.json index d70c371e..71f6ff8a 100644 --- a/mcp-registry/servers/firecrawl.json +++ b/mcp-registry/servers/firecrawl.json @@ -44,6 +44,42 @@ "env": { "FIRECRAWL_API_KEY": "${FIRECRAWL_API_KEY}" } + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "FIRECRAWL_API_URL", + "-e", + "FIRECRAWL_RETRY_MAX_ATTEMPTS", + "-e", + "FIRECRAWL_RETRY_INITIAL_DELAY", + "-e", + "FIRECRAWL_RETRY_MAX_DELAY", + "-e", + "FIRECRAWL_RETRY_BACKOFF_FACTOR", + "-e", + "FIRECRAWL_CREDIT_WARNING_THRESHOLD", + "-e", + "FIRECRAWL_CREDIT_CRITICAL_THRESHOLD", + "-e", + "FIRECRAWL_API_KEY", + "mcp/firecrawl" + ], + "env": { + "FIRECRAWL_API_URL": "https://api.firecrawl.dev/v1", + "FIRECRAWL_RETRY_MAX_ATTEMPTS": "5", + "FIRECRAWL_RETRY_INITIAL_DELAY": "2000", + "FIRECRAWL_RETRY_MAX_DELAY": "30000", + "FIRECRAWL_RETRY_BACKOFF_FACTOR": "3", + "FIRECRAWL_CREDIT_WARNING_THRESHOLD": "2000", + "FIRECRAWL_CREDIT_CRITICAL_THRESHOLD": "500", + "FIRECRAWL_API_KEY": "${FIRECRAWL_API_KEY}" + } } }, "arguments": { @@ -638,5 +674,6 @@ } } ], - "is_official": true -} \ No newline at end of file + "is_official": true, + "docker_url": "https://hub.docker.com/r/mcp/firecrawl" +} diff --git a/mcp-registry/servers/git.json b/mcp-registry/servers/git.json index f9e6547c..ba532244 100644 --- a/mcp-registry/servers/git.json +++ b/mcp-registry/servers/git.json @@ -298,5 +298,6 @@ } } ], - "is_official": true -} \ No newline at end of file + "is_official": true, + "docker_url": "https://hub.docker.com/r/mcp/git" +} diff --git a/mcp-registry/servers/github.json b/mcp-registry/servers/github.json index f307d9d9..722baf5a 100644 --- a/mcp-registry/servers/github.json +++ b/mcp-registry/servers/github.json @@ -1038,5 +1038,6 @@ } } ], - "is_official": true -} \ No newline at end of file + "is_official": true, + "docker_url": "https://hub.docker.com/r/mcp/github" +} diff --git a/mcp-registry/servers/gitlab.json b/mcp-registry/servers/gitlab.json index facb02d3..99481f91 100644 --- a/mcp-registry/servers/gitlab.json +++ b/mcp-registry/servers/gitlab.json @@ -365,5 +365,6 @@ } } ], - "is_official": true -} \ No newline at end of file + "is_official": true, + "docker_url": "https://hub.docker.com/r/mcp/gitlab" +} diff --git a/mcp-registry/servers/google-drive.json b/mcp-registry/servers/google-drive.json index fe0bbb4a..deca1c01 100644 --- a/mcp-registry/servers/google-drive.json +++ b/mcp-registry/servers/google-drive.json @@ -58,5 +58,6 @@ ] } ], - "is_official": true -} \ No newline at end of file + "is_official": true, + "docker_url": "https://hub.docker.com/r/mcp/gdrive" +} diff --git a/mcp-registry/servers/google-maps.json b/mcp-registry/servers/google-maps.json index 9c92e312..93a1e5c8 100644 --- a/mcp-registry/servers/google-maps.json +++ b/mcp-registry/servers/google-maps.json @@ -239,5 +239,6 @@ } } ], - "is_official": true -} \ No newline at end of file + "is_official": true, + "docker_url": "https://hub.docker.com/r/mcp/google-maps" +} diff --git a/mcp-registry/servers/gyazo.json b/mcp-registry/servers/gyazo.json new file mode 100644 index 00000000..f47edc56 --- /dev/null +++ b/mcp-registry/servers/gyazo.json @@ -0,0 +1,208 @@ +{ + "display_name": "Gyazo MCP Server", + "license": "MIT", + "tags": [ + "gyazo", + "images", + "mcp", + "model context protocol", + "typescript", + "api", + "search", + "upload", + "ocr" + ], + "installations": { + "npm": { + "type": "npm", + "command": "npx", + "args": [ + "@notainc/gyazo-mcp-server" + ], + "env": { + "GYAZO_ACCESS_TOKEN": "${GYAZO_ACCESS_TOKEN}" + }, + "description": "Using NPM package (recommended)" + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "GYAZO_ACCESS_TOKEN", + "mcp/gyazo" + ], + "env": { + "GYAZO_ACCESS_TOKEN": "${GYAZO_ACCESS_TOKEN}" + }, + "description": "Using Docker (optional)" + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "Search for screenshots related to 'dashboard' in my Gyazo account" + }, + { + "title": "", + "description": "", + "prompt": "Show me my latest Gyazo screenshot" + }, + { + "title": "", + "description": "", + "prompt": "Find Gyazo images containing text about 'meeting notes'" + }, + { + "title": "", + "description": "", + "prompt": "Upload this image to my Gyazo account" + }, + { + "title": "", + "description": "", + "prompt": "Fetch the details of this Gyazo image" + }, + { + "title": "", + "description": "", + "prompt": "Search for Gyazo screenshots I took last week" + }, + { + "title": "", + "description": "", + "prompt": "Show me Gyazo images from the Chrome app" + }, + { + "title": "", + "description": "", + "prompt": "Find Gyazo screenshots containing charts or graphs" + }, + { + "title": "", + "description": "", + "prompt": "Get the OCR text from my recent Gyazo screenshot" + }, + { + "title": "", + "description": "", + "prompt": "Upload this diagram to Gyazo with the title 'Project Architecture'" + } + ], + "name": "gyazo", + "repository": { + "type": "git", + "url": "https://github.com/nota/gyazo-mcp-server" + }, + "homepage": "https://github.com/nota/gyazo-mcp-server", + "author": { + "name": "nota" + }, + "description": "A Model Context Protocol server for Gyazo image integration", + "categories": [ + "Media Creation" + ], + "tools": [ + { + "name": "gyazo_search", + "description": "Full-text search for captures uploaded by users on Gyazo", + "inputSchema": { + "type": "object", + "properties": { + "query": { + "type": "string", + "description": "Search keyword (max length: 200 characters). example: 'cat', 'title:cat', 'app:\"Google Chrome\"', 'url:google.com', 'cat since:2024-01-01 until:2024-12-31' NOTE: If you cannot find an appropriate capture, try rephrasing the search query to capture the user's intent and repeat the search several times" + }, + "page": { + "type": "integer", + "description": "Page number for pagination", + "minimum": 1, + "default": 1 + }, + "per": { + "type": "integer", + "description": "Number of results per page (max: 100)", + "minimum": 1, + "maximum": 100, + "default": 20 + } + }, + "required": [ + "query" + ] + } + }, + { + "name": "gyazo_image", + "description": "Fetch image content and metadata from Gyazo", + "inputSchema": { + "type": "object", + "properties": { + "id_or_url": { + "type": "string", + "description": "ID or URL of the image on Gyazo" + } + }, + "required": [ + "id_or_url" + ] + } + }, + { + "name": "gyazo_latest_image", + "description": "Fetch latest uploaded image content and metadata from Gyazo", + "inputSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "const": "gyazo_latest_image" + } + }, + "required": [ + "name" + ] + } + }, + { + "name": "gyazo_upload", + "description": "Upload an image to Gyazo", + "inputSchema": { + "type": "object", + "properties": { + "imageData": { + "type": "string", + "description": "Base64 encoded image data" + }, + "title": { + "type": "string", + "description": "Title for the image (optional)" + }, + "description": { + "type": "string", + "description": "Description for the image (optional)" + }, + "refererUrl": { + "type": "string", + "description": "Source URL for the image (optional)." + }, + "app": { + "type": "string", + "description": "Application name for the image (optional)." + } + }, + "required": [ + "imageData" + ] + } + } + ], + "prompts": [], + "resources": [], + "is_official": false, + "docker_url": "https://hub.docker.com/r/mcp/gyazo" +} diff --git a/mcp-registry/servers/heroku.json b/mcp-registry/servers/heroku.json new file mode 100644 index 00000000..b0af51bc --- /dev/null +++ b/mcp-registry/servers/heroku.json @@ -0,0 +1,1023 @@ +{ + "display_name": "Heroku Platform MCP Server", + "license": "Apache-2.0", + "tags": [ + "heroku", + "mcp", + "platform", + "llm", + "model context protocol", + "devops", + "cloud", + "deployment", + "postgresql", + "database" + ], + "installations": { + "npm": { + "type": "npm", + "command": "npx", + "args": [ + "-y", + "@heroku/mcp-server" + ], + "description": "Install and run the Heroku MCP Server using NPX", + "env": { + "HEROKU_API_KEY": "${HEROKU_API_KEY}" + } + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "HEROKU_API_KEY", + "mcp/heroku" + ], + "env": { + "HEROKU_API_KEY": "${HEROKU_API_KEY}" + } + } + }, + "arguments": { + "HEROKU_API_KEY": { + "description": "Your Heroku API key with appropriate permissions.", + "required": true, + "example": "" + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "List all my Heroku apps" + }, + { + "title": "", + "description": "", + "prompt": "Get detailed information about my app named 'my-app'" + }, + { + "title": "", + "description": "", + "prompt": "Create a new Heroku app in the US region" + }, + { + "title": "", + "description": "", + "prompt": "Scale my web dynos to 2 for app 'my-app'" + }, + { + "title": "", + "description": "", + "prompt": "Show me the logs for my app 'my-app'" + }, + { + "title": "", + "description": "", + "prompt": "List all add-ons for my app 'my-app'" + }, + { + "title": "", + "description": "", + "prompt": "Create a Postgres add-on for my app 'my-app'" + }, + { + "title": "", + "description": "", + "prompt": "Execute a SQL query on my Postgres database" + }, + { + "title": "", + "description": "", + "prompt": "Enable maintenance mode for my app 'my-app'" + }, + { + "title": "", + "description": "", + "prompt": "List all my Heroku teams" + }, + { + "title": "", + "description": "", + "prompt": "Deploy my project to Heroku" + }, + { + "title": "", + "description": "", + "prompt": "Run a one-off dyno to execute a script" + }, + { + "title": "", + "description": "", + "prompt": "Promote my app in the pipeline" + }, + { + "title": "", + "description": "", + "prompt": "Show me information about my PostgreSQL database" + }, + { + "title": "", + "description": "", + "prompt": "Create a backup of my Postgres database" + } + ], + "name": "heroku", + "repository": { + "type": "git", + "url": "https://github.com/heroku/heroku-mcp-server" + }, + "homepage": "https://github.com/heroku/heroku-mcp-server", + "author": { + "name": "heroku" + }, + "description": "The Heroku Platform MCP Server is a specialized Model Context Protocol (MCP) implementation designed to facilitate", + "categories": [ + "Dev Tools" + ], + "tools": [ + { + "name": "list_apps", + "description": "List Heroku apps: owned, collaborator access, team/space filtering", + "inputSchema": { + "type": "object", + "properties": { + "all": { + "type": "boolean", + "description": "Show owned apps and collaborator access. Default: owned only" + }, + "personal": { + "type": "boolean", + "description": "List personal account apps only, ignoring default team" + }, + "space": { + "type": "string", + "description": "Filter by private space name. Excludes team param" + }, + "team": { + "type": "string", + "description": "Filter by team name. Excludes space param" + } + }, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "get_app_info", + "description": "Get app details: config, dynos, addons, access, domains", + "inputSchema": { + "type": "object", + "properties": { + "app": { + "type": "string", + "description": "Target app name. Requires access permissions" + }, + "json": { + "type": "boolean", + "description": "JSON output with full metadata. Default: text format" + } + }, + "required": [ + "app" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "create_app", + "description": "Create app: custom name, region (US/EU), team, private space", + "inputSchema": { + "type": "object", + "properties": { + "app": { + "type": "string", + "description": "App name. Auto-generated if omitted" + }, + "region": { + "type": "string", + "enum": [ + "us", + "eu" + ], + "description": "Region: us/eu. Default: us. Excludes space param" + }, + "space": { + "type": "string", + "description": "Private space name. Inherits region. Excludes region param" + }, + "team": { + "type": "string", + "description": "Team name for ownership" + } + }, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "rename_app", + "description": "Rename app: validate and update app name", + "inputSchema": { + "type": "object", + "properties": { + "app": { + "type": "string", + "description": "Current app name. Requires access" + }, + "newName": { + "type": "string", + "description": "New unique app name" + } + }, + "required": [ + "app", + "newName" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "transfer_app", + "description": "Transfer app ownership to user/team", + "inputSchema": { + "type": "object", + "properties": { + "app": { + "type": "string", + "description": "App to transfer. Requires owner/admin access" + }, + "recipient": { + "type": "string", + "description": "Target user email or team name" + } + }, + "required": [ + "app", + "recipient" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "maintenance_on", + "description": "Enable maintenance mode and redirect traffic for a Heroku app", + "inputSchema": { + "type": "object", + "properties": { + "app": { + "type": "string", + "description": "Target Heroku app name" + } + }, + "required": [ + "app" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "maintenance_off", + "description": "Disable maintenance mode and restore normal app operations", + "inputSchema": { + "type": "object", + "properties": { + "app": { + "type": "string", + "description": "Target Heroku app name" + } + }, + "required": [ + "app" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "get_app_logs", + "description": "App logs: monitor/debug/filter by dyno/process/source", + "inputSchema": { + "type": "object", + "properties": { + "app": { + "type": "string", + "description": "Heroku app name. Requires: permissions, Cedar-gen" + }, + "dynoName": { + "type": "string", + "description": "Format: web.1/worker.2. Excludes processType" + }, + "source": { + "type": "string", + "description": "app=application, heroku=platform. Default: all" + }, + "processType": { + "type": "string", + "description": "web|worker. All instances. Excludes dynoName" + } + }, + "required": [ + "app" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "list_private_spaces", + "description": "Lists Heroku Private Spaces with CIDR blocks, regions, compliance and capacity details. JSON output supported.", + "inputSchema": { + "type": "object", + "properties": { + "json": { + "type": "boolean", + "description": "JSON output for detailed space metadata, text output if false/omitted" + } + }, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "list_teams", + "description": "Lists accessible Heroku Teams. Use for: viewing teams, checking membership, getting team metadata, and verifying access. JSON output available.", + "inputSchema": { + "type": "object", + "properties": { + "json": { + "type": "boolean", + "description": "Output format control - true for detailed JSON with team metadata, false/omitted for simplified text" + } + }, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "list_addons", + "description": "List add-ons: all apps or specific app, detailed metadata", + "inputSchema": { + "type": "object", + "properties": { + "all": { + "type": "boolean", + "description": "List all add-ons across accessible apps. Overrides app param, shows full status" + }, + "app": { + "type": "string", + "description": "Filter by app name. Shows add-ons and attachments. Uses Git remote default if omitted" + } + }, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "get_addon_info", + "description": "Get add-on details: plan, state, billing", + "inputSchema": { + "type": "object", + "properties": { + "addon": { + "type": "string", + "description": "Add-on identifier: UUID, name (postgresql-curved-12345), or attachment name (DATABASE)" + }, + "app": { + "type": "string", + "description": "App context for add-on lookup. Required for attachment names. Uses Git remote default" + } + }, + "required": [ + "addon" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "create_addon", + "description": "Create add-on: specify service, plan, custom names", + "inputSchema": { + "type": "object", + "properties": { + "app": { + "type": "string", + "description": "Target app for add-on. Must have write access. Region/space affects availability" + }, + "as": { + "type": "string", + "description": "Custom attachment name. Used for config vars prefix. Must be unique in app" + }, + "name": { + "type": "string", + "description": "Global add-on identifier. Must be unique across all Heroku add-ons" + }, + "serviceAndPlan": { + "type": "string", + "description": "Format: service_slug:plan_slug (e.g., heroku-postgresql:essential-0)" + } + }, + "required": [ + "app", + "serviceAndPlan" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "list_addon_services", + "description": "List available add-on services and features", + "inputSchema": { + "type": "object", + "properties": { + "json": { + "type": "boolean", + "description": "JSON output with sharing options and app generation support. Default: basic text" + } + }, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "list_addon_plans", + "description": "List service plans: features, pricing, availability", + "inputSchema": { + "type": "object", + "properties": { + "service": { + "type": "string", + "description": "Service slug (e.g., heroku-postgresql). Get from list_addon_services" + }, + "json": { + "type": "boolean", + "description": "JSON output with pricing, features, space compatibility. Default: text format" + } + }, + "required": [ + "service" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "pg_psql", + "description": "Execute SQL queries: analyze, debug, modify schema, manage data", + "inputSchema": { + "type": "object", + "properties": { + "command": { + "type": "string", + "description": "SQL command. Single line. Ignored if file provided" + }, + "file": { + "type": "string", + "description": "SQL file path. Ignored if command provided" + }, + "credential": { + "type": "string", + "description": "credential to use" + }, + "app": { + "type": "string", + "description": "app to run command against" + }, + "database": { + "type": "string", + "description": "Database identifier: config var, name, ID, alias. Format: APP_NAME::DB for other apps. Default: DATABASE_URL" + } + }, + "required": [ + "app" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "pg_info", + "description": "View database status: config, metrics, resources, health", + "inputSchema": { + "type": "object", + "properties": { + "app": { + "type": "string", + "description": "Target app name" + }, + "database": { + "type": "string", + "description": "Database identifier. Format: APP_NAME::DB for other apps. Default: all databases" + } + }, + "required": [ + "app" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "pg_ps", + "description": "Monitor active queries: progress, resources, performance", + "inputSchema": { + "type": "object", + "properties": { + "app": { + "type": "string", + "description": "Target app name" + }, + "verbose": { + "type": "boolean", + "description": "Show query plan and memory usage" + }, + "database": { + "type": "string", + "description": "Database identifier. Format: APP_NAME::DB for other apps. Default: DATABASE_URL" + } + }, + "required": [ + "app" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "pg_locks", + "description": "Analyze locks: blocked queries, deadlocks, concurrency", + "inputSchema": { + "type": "object", + "properties": { + "app": { + "type": "string", + "description": "Target app name" + }, + "truncate": { + "type": "boolean", + "description": "Truncate queries to 40 chars" + }, + "database": { + "type": "string", + "description": "Database identifier. Format: APP_NAME::DB for other apps. Default: DATABASE_URL" + } + }, + "required": [ + "app" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "pg_outliers", + "description": "Find resource-heavy queries: performance, patterns, optimization", + "inputSchema": { + "type": "object", + "properties": { + "app": { + "type": "string", + "description": "Target app name" + }, + "num": { + "type": "number", + "description": "Number of queries to show. Default: 10" + }, + "reset": { + "type": "boolean", + "description": "Reset pg_stat_statements stats" + }, + "truncate": { + "type": "boolean", + "description": "Truncate queries to 40 chars" + }, + "database": { + "type": "string", + "description": "Database identifier. Format: APP_NAME::DB for other apps. Default: DATABASE_URL" + } + }, + "required": [ + "app" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "pg_credentials", + "description": "Manage access: credentials, permissions, security, monitoring", + "inputSchema": { + "type": "object", + "properties": { + "app": { + "type": "string", + "description": "Target app name" + }, + "database": { + "type": "string", + "description": "Database identifier. Format: APP_NAME::DB for other apps. Default: DATABASE_URL" + } + }, + "required": [ + "app" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "pg_kill", + "description": "Stop processes: stuck queries, blocking transactions, runaway operations", + "inputSchema": { + "type": "object", + "properties": { + "app": { + "type": "string", + "description": "Target app name" + }, + "pid": { + "type": "number", + "description": "Process ID to terminate" + }, + "force": { + "type": "boolean", + "description": "Force immediate termination" + }, + "database": { + "type": "string", + "description": "Database identifier. Format: APP_NAME::DB for other apps. Default: DATABASE_URL" + } + }, + "required": [ + "app", + "pid" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "pg_maintenance", + "description": "Track maintenance: windows, schedules, progress, planning", + "inputSchema": { + "type": "object", + "properties": { + "app": { + "type": "string", + "description": "Target app name" + }, + "database": { + "type": "string", + "description": "Database identifier. Format: APP_NAME::DB for other apps. Default: DATABASE_URL" + } + }, + "required": [ + "app" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "pg_backups", + "description": "Manage backups: schedules, status, verification, recovery", + "inputSchema": { + "type": "object", + "properties": { + "app": { + "type": "string", + "description": "Target app name" + } + }, + "required": [ + "app" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "pg_upgrade", + "description": "Upgrade PostgreSQL: version migration, compatibility, safety", + "inputSchema": { + "type": "object", + "properties": { + "app": { + "type": "string", + "description": "Target app name" + }, + "version": { + "type": "string", + "description": "PostgreSQL version target" + }, + "confirm": { + "type": "string", + "description": "Confirmation for destructive operation" + }, + "database": { + "type": "string", + "description": "Database identifier. Format: APP_NAME::DB for other apps. Default: DATABASE_URL" + } + }, + "required": [ + "app" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "ps_list", + "description": "List and monitor Heroku app dynos. View running dynos, check status/health, monitor process states, verify configurations.", + "inputSchema": { + "type": "object", + "properties": { + "app": { + "type": "string", + "description": "App name to list processes for" + }, + "json": { + "type": "boolean", + "description": "Output process info in JSON format" + } + }, + "required": [ + "app" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "ps_scale", + "description": "Scale Heroku app dynos. Adjust quantities, change sizes, view formation details, manage resources.", + "inputSchema": { + "type": "object", + "properties": { + "app": { + "type": "string", + "description": "App name to scale" + }, + "dyno": { + "type": "string", + "description": "Dyno type and quantity (e.g., web=3:Standard-2X, worker+1). Omit to show current formation" + } + }, + "required": [ + "app" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "ps_restart", + "description": "Restart Heroku app processes. Restart specific dynos, process types, or all dynos. Reset dyno states selectively.", + "inputSchema": { + "type": "object", + "properties": { + "app": { + "type": "string", + "description": "App name to restart processes for" + }, + "dyno-name": { + "type": "string", + "description": "Specific dyno to restart (e.g., web.1). Omit both options to restart all" + }, + "process-type": { + "type": "string", + "description": "Dyno type to restart (e.g., web). Omit both options to restart all" + } + }, + "required": [ + "app" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "pipelines_create", + "description": "Creates new Heroku deployment pipeline with configurable stages, apps, and team settings", + "inputSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Pipeline name" + }, + "stage": { + "type": "string", + "enum": [ + "development", + "staging", + "production" + ], + "description": "Initial pipeline stage" + }, + "app": { + "type": "string", + "description": "App to add to pipeline" + }, + "team": { + "type": "string", + "description": "Team owning the pipeline" + } + }, + "required": [ + "name", + "stage" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "pipelines_promote", + "description": "Promotes apps between pipeline stages with configurable target applications", + "inputSchema": { + "type": "object", + "properties": { + "app": { + "type": "string", + "description": "Source app for promotion" + }, + "to": { + "type": "string", + "description": "Target apps for promotion (comma-separated)" + } + }, + "required": [ + "app" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "pipelines_list", + "description": "Lists accessible Heroku pipelines with ownership and configuration details", + "inputSchema": { + "type": "object", + "properties": { + "json": { + "type": "boolean", + "description": "Enable JSON output" + } + }, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "pipelines_info", + "description": "Displays detailed pipeline configuration, stages, and connected applications", + "inputSchema": { + "type": "object", + "properties": { + "pipeline": { + "type": "string", + "description": "Target pipeline name" + }, + "json": { + "type": "boolean", + "description": "Enable JSON output" + } + }, + "required": [ + "pipeline" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "deploy_to_heroku", + "description": "Use for all deployments. Deploys new/existing apps, with or without teams/spaces, and env vars to Heroku. Ask for app name if missing. Requires valid app.json via appJson param.", + "inputSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 5, + "maxLength": 30, + "description": "App name for deployment. Creates new app if not exists." + }, + "rootUri": { + "type": "string", + "minLength": 1, + "description": "Workspace root directory path." + }, + "tarballUri": { + "type": "string", + "description": "URL of deployment tarball. Creates from rootUri if not provided." + }, + "teamId": { + "type": "string", + "description": "Team ID for team deployments." + }, + "spaceId": { + "type": "string", + "description": "Private space ID for space deployments." + }, + "internalRouting": { + "type": "boolean", + "description": "Enable internal routing in private spaces." + }, + "env": { + "type": "object", + "additionalProperties": {}, + "description": "Environment variables overriding app.json values" + }, + "appJson": { + "type": "string", + "description": "App.json config for deployment. Must follow schema: {\"default\":{\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"Heroku app.json Schema\",\"description\":\"app.json is a manifest format for describing web apps. It declares environment variables, add-ons, and other information required to run an app on Heroku. Used for dynamic configurations or converted projects\",\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"pattern\":\"^[a-zA-Z-_\\\\.]+\",\"maxLength\":300},\"description\":{\"type\":\"string\"},\"keywords\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"website\":{\"$ref\":\"#/definitions/uriString\"},\"repository\":{\"$ref\":\"#/definitions/uriString\"},\"logo\":{\"$ref\":\"#/definitions/uriString\"},\"success_url\":{\"type\":\"string\"},\"scripts\":{\"$ref\":\"#/definitions/scripts\"},\"env\":{\"$ref\":\"#/definitions/env\"},\"formation\":{\"$ref\":\"#/definitions/formation\"},\"addons\":{\"$ref\":\"#/definitions/addons\"},\"buildpacks\":{\"$ref\":\"#/definitions/buildpacks\"},\"environments\":{\"$ref\":\"#/definitions/environments\"},\"stack\":{\"$ref\":\"#/definitions/stack\"},\"image\":{\"type\":\"string\"}},\"additionalProperties\":false,\"definitions\":{\"uriString\":{\"type\":\"string\",\"format\":\"uri\"},\"scripts\":{\"type\":\"object\",\"properties\":{\"postdeploy\":{\"type\":\"string\"},\"pr-predestroy\":{\"type\":\"string\"}},\"additionalProperties\":false},\"env\":{\"type\":\"object\",\"patternProperties\":{\"^[A-Z][A-Z0-9_]*$\":{\"type\":\"object\",\"properties\":{\"description\":{\"type\":\"string\"},\"value\":{\"type\":\"string\"},\"required\":{\"type\":\"boolean\"},\"generator\":{\"type\":\"string\",\"enum\":[\"secret\"]}},\"additionalProperties\":false}}},\"dynoSize\":{\"type\":\"string\",\"enum\":[\"free\",\"eco\",\"hobby\",\"basic\",\"standard-1x\",\"standard-2x\",\"performance-m\",\"performance-l\",\"private-s\",\"private-m\",\"private-l\",\"shield-s\",\"shield-m\",\"shield-l\"]},\"formation\":{\"type\":\"object\",\"patternProperties\":{\"^[a-zA-Z0-9_-]+$\":{\"type\":\"object\",\"properties\":{\"quantity\":{\"type\":\"integer\",\"minimum\":0},\"size\":{\"$ref\":\"#/definitions/dynoSize\"}},\"required\":[\"quantity\"],\"additionalProperties\":false}}},\"addons\":{\"type\":\"array\",\"items\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"properties\":{\"plan\":{\"type\":\"string\"},\"as\":{\"type\":\"string\"},\"options\":{\"type\":\"object\"}},\"required\":[\"plan\"],\"additionalProperties\":false}]}},\"buildpacks\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"url\":{\"type\":\"string\"}},\"required\":[\"url\"],\"additionalProperties\":false}},\"environmentConfig\":{\"type\":\"object\",\"properties\":{\"env\":{\"type\":\"object\"},\"formation\":{\"type\":\"object\"},\"addons\":{\"type\":\"array\"},\"buildpacks\":{\"type\":\"array\"}}},\"environments\":{\"type\":\"object\",\"properties\":{\"test\":{\"allOf\":[{\"$ref\":\"#/definitions/environmentConfig\"},{\"type\":\"object\",\"properties\":{\"scripts\":{\"type\":\"object\",\"properties\":{\"test\":{\"type\":\"string\"}},\"additionalProperties\":false}}}]},\"review\":{\"$ref\":\"#/definitions/environmentConfig\"},\"production\":{\"$ref\":\"#/definitions/environmentConfig\"}},\"additionalProperties\":false},\"stack\":{\"type\":\"string\",\"enum\":[\"heroku-18\",\"heroku-20\",\"heroku-22\",\"heroku-24\"]}}}}" + } + }, + "required": [ + "name", + "rootUri", + "appJson" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "deploy_one_off_dyno", + "description": "\nRun code/commands in Heroku one-off dyno with network and filesystem access.\n\nRequirements:\n- Show command output\n- Use app_info for buildpack detection\n- Support shell setup commands\n- Use stdout/stderr\n\nFeatures:\n- Network/filesystem access\n- Environment variables\n- File operations\n- Temp directory handling\n\nUsage:\n1. Use Heroku runtime\n2. Proper syntax/imports\n3. Organized code structure\n4. Package management:\n - Define dependencies\n - Minimize external deps\n - Prefer native modules\n\nExample package.json:\n```json\n{\n \"type\": \"module\",\n \"dependencies\": {\n \"axios\": \"^1.6.0\"\n }\n}\n```\n", + "inputSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 5, + "maxLength": 30, + "description": "Target Heroku app name." + }, + "command": { + "type": "string", + "description": "Command to run in dyno." + }, + "sources": { + "type": "array", + "items": { + "type": "object", + "properties": { + "relativePath": { + "type": "string", + "description": "Virtual path for tarball entry." + }, + "contents": { + "type": "string", + "description": "File contents." + } + }, + "required": [ + "relativePath", + "contents" + ], + "additionalProperties": false + }, + "description": "Source files to include in dyno." + }, + "size": { + "type": "string", + "description": "Dyno size.", + "default": "standard-1x" + }, + "timeToLive": { + "type": "number", + "description": "Dyno lifetime in seconds.", + "default": 3600 + }, + "env": { + "type": "object", + "additionalProperties": {}, + "description": "Dyno environment variables." + } + }, + "required": [ + "name", + "command" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + } + ], + "prompts": [], + "resources": [], + "is_official": false, + "docker_url": "https://hub.docker.com/r/mcp/heroku" +} diff --git a/mcp-registry/servers/kubernetes.json b/mcp-registry/servers/kubernetes.json index 9918477a..b2e7b07a 100644 --- a/mcp-registry/servers/kubernetes.json +++ b/mcp-registry/servers/kubernetes.json @@ -27,6 +27,16 @@ "-y", "mcp-server-kubernetes" ] + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "mcp/kubernetes" + ] } }, "tools": [ @@ -862,5 +872,6 @@ ] } } - ] -} \ No newline at end of file + ], + "docker_url": "https://hub.docker.com/r/mcp/kubernetes" +} diff --git a/mcp-registry/servers/lara-mcp.json b/mcp-registry/servers/lara-mcp.json new file mode 100644 index 00000000..69d7ef14 --- /dev/null +++ b/mcp-registry/servers/lara-mcp.json @@ -0,0 +1,443 @@ +{ + "display_name": "Lara Translate MCP Server", + "license": "MIT", + "tags": [ + "translation", + "MCP", + "Model Context Protocol", + "language detection", + "translation memories", + "multilingual", + "API" + ], + "installations": { + "npm": { + "type": "npm", + "command": "npx", + "args": [ + "-y", + "@translated/lara-mcp@latest" + ], + "env": { + "LARA_ACCESS_KEY_ID": "${LARA_ACCESS_KEY_ID}", + "LARA_ACCESS_KEY_SECRET": "${LARA_ACCESS_KEY_SECRET}" + }, + "description": "Using NPX to run the Lara Translate MCP server" + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "LARA_ACCESS_KEY_ID", + "-e", + "LARA_ACCESS_KEY_SECRET", + "mcp/lara" + ], + "env": { + "LARA_ACCESS_KEY_ID": "${LARA_ACCESS_KEY_ID}", + "LARA_ACCESS_KEY_SECRET": "${LARA_ACCESS_KEY_SECRET}" + } + } + }, + "arguments": { + "LARA_ACCESS_KEY_ID": { + "description": "Lara Translate Access Key ID", + "required": true, + "examples": "YOUR_ACCESS_KEY_ID" + }, + "LARA_ACCESS_KEY_SECRET": { + "description": "Lara Translate Access Key Secret", + "required": true, + "examples": "YOUR_ACCESS_KEY_SECRET" + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "Translate with Lara \"Hello world\" to Spanish" + }, + { + "title": "", + "description": "", + "prompt": "Translate with Lara \"I need this document translated\" from English to French" + }, + { + "title": "", + "description": "", + "prompt": "Use Lara to translate \"Welcome to our website\" to Italian with context \"This is for a corporate website header\"" + }, + { + "title": "", + "description": "", + "prompt": "List all my translation memories using Lara" + }, + { + "title": "", + "description": "", + "prompt": "Create a new translation memory in Lara called \"Marketing Content\"" + }, + { + "title": "", + "description": "", + "prompt": "Add a translation to my memory: source \"Hello\" in English, translation \"Hola\" in Spanish" + }, + { + "title": "", + "description": "", + "prompt": "Translate this paragraph with Lara to German: \"Artificial intelligence is transforming how we work and live. New tools emerge every day that help us be more productive.\"" + }, + { + "title": "", + "description": "", + "prompt": "Translate with Lara from Italian to English: \"Buongiorno, come stai oggi?\"" + }, + { + "title": "", + "description": "", + "prompt": "Use Lara to translate this text with instructions to maintain formal tone: \"Thank you for your purchase\" to Japanese" + } + ], + "name": "lara-mcp", + "repository": { + "type": "git", + "url": "https://github.com/translated/lara-mcp" + }, + "homepage": "https://github.com/translated/lara-mcp", + "author": { + "name": "translated" + }, + "description": "A Model Context Protocol (MCP) Server for [Lara Translate](https://laratranslate.com/translate) API, enabling powerful translation capabilities with support for language detection, context-aware translations and translation memories.", + "categories": [ + "Productivity" + ], + "tools": [ + { + "name": "translate", + "description": "Translate text between languages with support for language detection, context-aware translations and translation memories using Lara Translate.", + "inputSchema": { + "type": "object", + "properties": { + "text": { + "type": "array", + "items": { + "type": "object", + "properties": { + "text": { + "type": "string" + }, + "translatable": { + "type": "boolean" + } + }, + "required": [ + "text", + "translatable" + ], + "additionalProperties": false + }, + "description": "An array of text blocks to translate. Each block contains a text string and a boolean indicating whether it should be translated. This allows for selective translation where some text blocks can be preserved in their original form while others are translated." + }, + "source": { + "type": "string", + "description": "The source language code (e.g., 'en-EN' for English). If not specified, the system will attempt to detect it automatically. If you have a hint about the source language, you should specify it in the source_hint field." + }, + "target": { + "type": "string", + "description": "The target language code (e.g., 'it-IT' for Italian). This specifies the language you want the text translated into." + }, + "context": { + "type": "string", + "description": "Additional context string to improve translation quality (e.g., 'This is a legal document' or 'Im talking with a doctor'). This helps the translation system better understand the domain." + }, + "instructions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of instructions to adjust the network\u2019s behavior regarding the output (e.g., 'Use a formal tone')." + }, + "source_hint": { + "type": "string", + "description": "Used to guide language detection. Specify this when the source language is uncertain to improve detection accuracy." + }, + "adapt_to": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of translation memory IDs for adapting the translation." + } + }, + "required": [ + "text", + "target" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "create_memory", + "description": "Create a translation memory with a custom name in your Lara Translate account. Translation memories store pairs of source and target text segments (translation units) for reuse in future translations.", + "inputSchema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the new memory, it should be short and generic, like 'catch_phrases' or 'brand_names'" + }, + "external_id": { + "type": "string", + "description": "The ID of the memory to be imported from MyMemory. Use this to initialize the memory with external content. Format: ext_my_[MyMemory ID]" + } + }, + "required": [ + "name" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "delete_memory", + "description": "Deletes a translation memory from your Lara Translate account.", + "inputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The unique identifier of the memory to update. Format: mem_xyz123" + } + }, + "required": [ + "id" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "update_memory", + "description": "Updates a translation memory in your Lara Translate account.", + "inputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The unique identifier of the memory to update. Format: mem_xyz123" + }, + "name": { + "type": "string", + "description": "The new name for the memory" + } + }, + "required": [ + "id", + "name" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "add_translation", + "description": "Adds a translation to a translation memory in your Lara Translate account.", + "inputSchema": { + "type": "object", + "properties": { + "id": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The ID or list of IDs where to save the translation unit. Format: mem_xyz123" + }, + "source": { + "type": "string", + "description": "The source language code of the sentence, it MUST be a language supported by the system, use the list_languages tool to get a list of all the supported languages" + }, + "target": { + "type": "string", + "description": "The target language code of the translation, it MUST be a language supported by the system, use the list_languages tool to get a list of all the supported languages" + }, + "sentence": { + "type": "string", + "description": "The source sentence" + }, + "translation": { + "type": "string", + "description": "The translated sentence" + }, + "tuid": { + "type": "string", + "description": "Translation Unit unique identifier" + }, + "sentence_before": { + "type": "string", + "description": "The sentence before the source sentence to specify the context of the translation unit" + }, + "sentence_after": { + "type": "string", + "description": "The sentence after the source sentence to specify the context of the translation unit" + } + }, + "required": [ + "id", + "source", + "target", + "sentence", + "translation" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "delete_translation", + "description": "Deletes a translation from a translation memory from your Lara Translate account.", + "inputSchema": { + "type": "object", + "properties": { + "id": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The ID or list of IDs where to delete the translation unit from. Format: mem_xyz123" + }, + "source": { + "type": "string", + "description": "The source language code of the sentence" + }, + "target": { + "type": "string", + "description": "The target language code of the translation" + }, + "sentence": { + "type": "string", + "description": "The source sentence" + }, + "translation": { + "type": "string", + "description": "The translated sentence" + }, + "tuid": { + "type": "string", + "description": "Translation Unit unique identifier" + }, + "sentence_before": { + "type": "string", + "description": "The sentence before the source sentence to specify the context of the translation unit" + }, + "sentence_after": { + "type": "string", + "description": "The sentence after the source sentence to specify the context of the translation unit" + } + }, + "required": [ + "id", + "source", + "target", + "sentence", + "translation" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "import_tmx", + "description": "Imports a TMX file into a translation memory in your Lara Translate account.", + "inputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the memory to update. Format: mem_xyz123." + }, + "tmx_content": { + "type": "string", + "description": "The content of the tmx file to upload. Don't provide this if you choose to use tmx_url." + }, + "tmx_url": { + "type": "string", + "description": "A URL to the tmx file to upload. Don't provide this if you choose to use tmx_content." + }, + "gzip": { + "type": "boolean", + "description": "Indicates if the file is a compressed .gz file" + } + }, + "required": [ + "id" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "check_import_status", + "description": "Checks the status of a TMX file import job in your Lara Translate account.", + "inputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the import job" + } + }, + "required": [ + "id" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "list_memories", + "description": "Lists all translation memories in your Lara Translate account.", + "inputSchema": { + "type": "object", + "properties": {}, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "list_languages", + "description": "Lists all supported languages in your Lara Translate account.", + "inputSchema": { + "type": "object", + "properties": {}, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + } + ], + "prompts": [], + "resources": [ + { + "uri": "memories://list", + "name": "Translation Memories", + "description": "List of translation memories in your Lara Translate account.", + "mimeType": "", + "size": 0, + "annotations": "" + }, + { + "uri": "languages://list", + "name": "Supported Languages", + "description": "List of Lara Translate supported languages.", + "mimeType": "", + "size": 0, + "annotations": "" + } + ], + "is_official": false, + "docker_url": "https://hub.docker.com/r/mcp/lara" +} diff --git a/mcp-registry/servers/line-bot.json b/mcp-registry/servers/line-bot.json new file mode 100644 index 00000000..8a3202e8 --- /dev/null +++ b/mcp-registry/servers/line-bot.json @@ -0,0 +1,100 @@ +{ + "display_name": "LINE Bot MCP Server", + "license": "Apache-2.0", + "tags": [ + "LINE", + "bot", + "messaging", + "MCP", + "Model Context Protocol", + "AI Agent", + "LINE Messaging API" + ], + "installations": { + "npm": { + "type": "npm", + "command": "node", + "args": [ + "PATH/TO/line-bot-mcp-server/dist/index.js" + ], + "env": { + "CHANNEL_ACCESS_TOKEN": "${CHANNEL_ACCESS_TOKEN}", + "DESTINATION_USER_ID": "${DESTINATION_USER_ID}" + }, + "description": "Run the LINE Bot MCP Server using Node.js" + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "CHANNEL_ACCESS_TOKEN", + "-e", + "DESTINATION_USER_ID", + "mcp/line" + ], + "env": { + "CHANNEL_ACCESS_TOKEN": "${CHANNEL_ACCESS_TOKEN}", + "DESTINATION_USER_ID": "${DESTINATION_USER_ID}" + }, + "description": "Run the LINE Bot MCP Server using Docker" + } + }, + "arguments": { + "CHANNEL_ACCESS_TOKEN": { + "description": "Your LINE channel access token.", + "required": true, + "example": "" + }, + "DESTINATION_USER_ID": { + "description": "The user ID of the destination user.", + "required": true, + "example": "" + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "Send a text message to a LINE user saying 'Hello, how are you today?'" + }, + { + "title": "", + "description": "", + "prompt": "Create a flex message with a carousel layout showing product options" + }, + { + "title": "", + "description": "", + "prompt": "Broadcast a text announcement to all followers of my LINE Official Account" + }, + { + "title": "", + "description": "", + "prompt": "Get the profile information of a specific LINE user" + }, + { + "title": "", + "description": "", + "prompt": "Send a flex message with a bubble container that includes an image and text" + } + ], + "name": "line-bot", + "repository": { + "type": "git", + "url": "https://github.com/line/line-bot-mcp-server" + }, + "homepage": "https://github.com/line/line-bot-mcp-server", + "author": { + "name": "line" + }, + "description": "1. **push_text_message**", + "categories": [ + "Messaging" + ], + "is_official": false, + "docker_url": "https://hub.docker.com/r/mcp/line" +} diff --git a/mcp-registry/servers/mcp-circleci.json b/mcp-registry/servers/mcp-circleci.json new file mode 100644 index 00000000..1220551c --- /dev/null +++ b/mcp-registry/servers/mcp-circleci.json @@ -0,0 +1,200 @@ +{ + "display_name": "CircleCI MCP Server", + "license": "Apache-2.0", + "tags": [ + "circleci", + "mcp", + "model context protocol", + "llm", + "ci/cd", + "build logs", + "flaky tests", + "config validation" + ], + "installations": { + "npm": { + "type": "npm", + "command": "npx", + "args": [ + "-y", + "@circleci/mcp-server-circleci" + ], + "env": { + "CIRCLECI_TOKEN": "${CIRCLECI_TOKEN}", + "CIRCLECI_BASE_URL": "${CIRCLECI_BASE_URL}" + }, + "description": "Installation for Windsurf" + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "CIRCLECI_BASE_URL", + "-e", + "CIRCLECI_TOKEN", + "mcp/circleci" + ], + "env": { + "CIRCLECI_BASE_URL": "${CIRCLECI_BASE_URL}", + "CIRCLECI_TOKEN": "${CIRCLECI_TOKEN}" + } + } + }, + "arguments": { + "CIRCLECI_TOKEN": { + "description": "CircleCI token", + "required": true, + "example": "your-circleci-token" + }, + "CIRCLECI_BASE_URL": { + "description": "CircleCI base URL", + "required": true, + "example": "https://circleci.com" + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "Find the latest failed pipeline on my branch and get logs" + }, + { + "title": "", + "description": "", + "prompt": "Get logs from https://app.circleci.com/pipelines/github/org/repo/123" + }, + { + "title": "", + "description": "", + "prompt": "Find flaky tests in https://app.circleci.com/pipelines/github/org/repo" + }, + { + "title": "", + "description": "", + "prompt": "Find flaky tests in my current project" + }, + { + "title": "", + "description": "", + "prompt": "Validate my CircleCI config" + } + ], + "name": "mcp-circleci", + "repository": { + "type": "git", + "url": "https://github.com/CircleCI-Public/mcp-server-circleci" + }, + "homepage": "https://github.com/CircleCI-Public/mcp-server-circleci", + "author": { + "name": "CircleCI-Public" + }, + "description": "Model Context Protocol (MCP) is a [new, standardized protocol](https://modelcontextprotocol.io/introduction) for managing context between large language models (LLMs) and external systems. In this repository, we provide an MCP Server for [CircleCI](https://circleci.com).", + "categories": [ + "Dev Tools" + ], + "tools": [ + { + "name": "get_build_failure_logs", + "description": "\n This tool helps debug CircleCI build failures by retrieving failure logs.\n\n CRITICAL REQUIREMENTS:\n 1. Truncation Handling (HIGHEST PRIORITY):\n - ALWAYS check for in the output\n - When present, you MUST start your response with:\n \"WARNING: The logs have been truncated. Only showing the most recent entries. Earlier build failures may not be visible.\"\n - Only proceed with log analysis after acknowledging the truncation\n\n Input options (EXACTLY ONE of these two options must be used):\n\n Option 1 - Direct URL (provide ONE of these):\n - projectURL: The URL of the CircleCI project in any of these formats:\n * Project URL: https://app.circleci.com/pipelines/gh/organization/project\n * Pipeline URL: https://app.circleci.com/pipelines/gh/organization/project/123\n * Workflow URL: https://app.circleci.com/pipelines/gh/organization/project/123/workflows/abc-def\n * Job URL: https://app.circleci.com/pipelines/gh/organization/project/123/workflows/abc-def/jobs/xyz\n\n Option 2 - Project Detection (ALL of these must be provided together):\n - workspaceRoot: The absolute path to the workspace root\n - gitRemoteURL: The URL of the git remote repository\n - branch: The name of the current branch\n\n Additional Requirements:\n - Never call this tool with incomplete parameters\n - If using Option 1, the URLs MUST be provided by the user - do not attempt to construct or guess URLs\n - If using Option 2, ALL THREE parameters (workspaceRoot, gitRemoteURL, branch) must be provided\n - If neither option can be fully satisfied, ask the user for the missing information before making the tool call\n ", + "inputSchema": { + "type": "object", + "properties": { + "params": { + "type": "object", + "properties": { + "workspaceRoot": { + "type": "string", + "description": "The absolute path to the root directory of your project workspace. This should be the top-level folder containing your source code, configuration files, and dependencies. For example: \"/home/user/my-project\" or \"C:\\Users\\user\\my-project\"" + }, + "gitRemoteURL": { + "type": "string", + "description": "The URL of the remote git repository. This should be the URL of the repository that you cloned to your local workspace. For example: \"https://github.com/user/my-project.git\"" + }, + "branch": { + "type": "string", + "description": "The name of the branch currently checked out in local workspace. This should match local git branch. For example: \"feature/my-branch\", \"bugfix/123\", \"main\", \"master\" etc." + }, + "projectURL": { + "type": "string", + "description": "The URL of the CircleCI project. Can be any of these formats:\n- Project URL with branch: https://app.circleci.com/pipelines/gh/organization/project?branch=feature-branch\n- Pipeline URL: https://app.circleci.com/pipelines/gh/organization/project/123\n- Workflow URL: https://app.circleci.com/pipelines/gh/organization/project/123/workflows/abc-def\n- Job URL: https://app.circleci.com/pipelines/gh/organization/project/123/workflows/abc-def/jobs/xyz" + } + }, + "additionalProperties": false + } + }, + "required": [ + "params" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "find_flaky_tests", + "description": "\n This tool retrieves information about flaky tests in a CircleCI project. \n \n The agent receiving this output MUST analyze the flaky test data and implement appropriate fixes based on the specific issues identified.\n\n CRITICAL REQUIREMENTS:\n 1. Truncation Handling (HIGHEST PRIORITY):\n - ALWAYS check for in the output\n - When present, you MUST start your response with:\n \"WARNING: The logs have been truncated. Only showing the most recent entries. Earlier build failures may not be visible.\"\n - Only proceed with log analysis after acknowledging the truncation\n\n Input options (EXACTLY ONE of these two options must be used):\n\n Option 1 - Direct URL (provide ONE of these):\n - projectURL: The URL of the CircleCI project in any of these formats:\n * Project URL: https://app.circleci.com/pipelines/gh/organization/project\n * Pipeline URL: https://app.circleci.com/pipelines/gh/organization/project/123\n * Workflow URL: https://app.circleci.com/pipelines/gh/organization/project/123/workflows/abc-def\n * Job URL: https://app.circleci.com/pipelines/gh/organization/project/123/workflows/abc-def/jobs/xyz\n\n Option 2 - Project Detection (ALL of these must be provided together):\n - workspaceRoot: The absolute path to the workspace root\n - gitRemoteURL: The URL of the git remote repository\n\n Additional Requirements:\n - Never call this tool with incomplete parameters\n - If using Option 1, the URLs MUST be provided by the user - do not attempt to construct or guess URLs\n - If using Option 2, BOTH parameters (workspaceRoot, gitRemoteURL) must be provided\n - If neither option can be fully satisfied, ask the user for the missing information before making the tool call\n ", + "inputSchema": { + "type": "object", + "properties": { + "params": { + "type": "object", + "properties": { + "workspaceRoot": { + "type": "string", + "description": "The absolute path to the root directory of your project workspace. This should be the top-level folder containing your source code, configuration files, and dependencies. For example: \"/home/user/my-project\" or \"C:\\Users\\user\\my-project\"" + }, + "gitRemoteURL": { + "type": "string", + "description": "The URL of the remote git repository. This should be the URL of the repository that you cloned to your local workspace. For example: \"https://github.com/user/my-project.git\"" + }, + "projectURL": { + "type": "string", + "description": "The URL of the CircleCI project. Can be any of these formats:\n- Project URL: https://app.circleci.com/pipelines/gh/organization/project\n- Project URL with branch: https://app.circleci.com/pipelines/gh/organization/project?branch=feature-branch\n- Pipeline URL: https://app.circleci.com/pipelines/gh/organization/project/123\n- Workflow URL: https://app.circleci.com/pipelines/gh/organization/project/123/workflows/abc-def\n- Job URL: https://app.circleci.com/pipelines/gh/organization/project/123/workflows/abc-def/jobs/xyz" + } + }, + "additionalProperties": false + } + }, + "required": [ + "params" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "config_helper", + "description": "\n This tool helps analyze and validate and fix CircleCI configuration files.\n\n Parameters:\n - params: An object containing:\n - configFile: string - The full contents of the CircleCI config file as a string. This should be the raw YAML content, not a file path.\n\n Example usage:\n {\n \"params\": {\n \"configFile\": \"version: 2.1\norbs:\n node: circleci/node@7\n...\"\n }\n }\n\n Note: The configFile content should be provided as a properly escaped string with newlines represented as \n.\n\n Tool output instructions:\n - If the config is invalid, the tool will return the errors and the original config. Use the errors to fix the config.\n - If the config is valid, do nothing.\n ", + "inputSchema": { + "type": "object", + "properties": { + "params": { + "type": "object", + "properties": { + "configFile": { + "type": "string", + "description": "The contents of the circleci config file. This should be the contents of the circleci config file, not the path to the file. Typically located at .circleci/config.yml" + } + }, + "required": [ + "configFile" + ], + "additionalProperties": false + } + }, + "required": [ + "params" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + } + ], + "prompts": [], + "resources": [], + "is_official": false, + "docker_url": "https://hub.docker.com/r/mcp/circleci" +} diff --git a/mcp-registry/servers/mcp-discord.json b/mcp-registry/servers/mcp-discord.json new file mode 100644 index 00000000..18d95a94 --- /dev/null +++ b/mcp-registry/servers/mcp-discord.json @@ -0,0 +1,117 @@ +{ + "display_name": "MCP-Discord", + "license": "MIT License", + "tags": [ + "discord", + "mcp", + "model context protocol", + "bot", + "messaging", + "webhook", + "channel management", + "forum" + ], + "installations": { + "custom": { + "type": "custom", + "command": "node", + "args": [ + "path/to/mcp-discord/build/index.js" + ], + "env": { + "DISCORD_TOKEN": "${DISCORD_TOKEN}" + }, + "description": "Manual installation with node" + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "DISCORD_TOKEN", + "mcp/mcp-discord" + ], + "env": { + "DISCORD_TOKEN": "${DISCORD_TOKEN}" + }, + "description": "Run the MCP-Discord server using Docker" + } + }, + "arguments": { + "DISCORD_TOKEN": { + "description": "Your Discord bot token.", + "required": true, + "example": "" + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "Can you help me login to Discord?" + }, + { + "title": "", + "description": "", + "prompt": "Please send a message to the general channel saying 'Hello everyone!'" + }, + { + "title": "", + "description": "", + "prompt": "Get information about my Discord server" + }, + { + "title": "", + "description": "", + "prompt": "Create a new text channel called 'announcements'" + }, + { + "title": "", + "description": "", + "prompt": "Read the last 10 messages from the general channel" + }, + { + "title": "", + "description": "", + "prompt": "Add a \ud83d\udc4d reaction to the last message in the channel" + }, + { + "title": "", + "description": "", + "prompt": "Create a new forum post in the help channel with the title 'Need assistance' and content 'Can someone help me with this issue?'" + }, + { + "title": "", + "description": "", + "prompt": "Delete the message with ID 123456789 from the general channel" + }, + { + "title": "", + "description": "", + "prompt": "Create a webhook for the announcements channel" + }, + { + "title": "", + "description": "", + "prompt": "Send a message using the webhook with the name 'News Bot'" + } + ], + "name": "mcp-discord", + "repository": { + "type": "git", + "url": "https://github.com/barryyip0625/mcp-discord" + }, + "homepage": "https://github.com/barryyip0625/mcp-discord", + "author": { + "name": "barryyip0625" + }, + "description": "A Discord MCP (Model Context Protocol) server that enables AI assistants to interact with the Discord platform.", + "categories": [ + "Messaging" + ], + "is_official": true, + "docker_url": "https://hub.docker.com/r/mcp/mcp-discord" +} diff --git a/mcp-registry/servers/mcp-grafana.json b/mcp-registry/servers/mcp-grafana.json index b33132b8..0d1de7e8 100644 --- a/mcp-registry/servers/mcp-grafana.json +++ b/mcp-registry/servers/mcp-grafana.json @@ -27,18 +27,37 @@ } }, "installations": { - "custom": { - "type": "custom", - "command": "go", + "cli": { + "type": "cli", + "command": "mcp-grafana", + "args": [], + "env": { + "GRAFANA_URL": "${GRAFANA_URL}", + "GRAFANA_API_KEY": "${GRAFANA_API_KEY}" + }, + "description": "Install from source using mcp-grafana cli", + "recommended": false + }, + "docker": { + "type": "docker", + "command": "docker", "args": [ - "install", - "github.com/grafana/mcp-grafana/cmd/mcp-grafana@latest" + "run", + "-i", + "--rm", + "-e", + "GRAFANA_URL", + "-e", + "GRAFANA_API_KEY", + "mcp/grafana", + "--transport=stdio" ], "env": { - "GOBIN": "$HOME/go/bin" + "GRAFANA_URL": "${GRAFANA_URL}", + "GRAFANA_API_KEY": "${GRAFANA_API_KEY}" }, - "description": "Install from source using Go", - "recommended": false + "description": "Install from source using docker", + "recommended": true } }, "examples": [ @@ -63,5 +82,6 @@ "categories": [ "Analytics" ], - "is_official": true -} \ No newline at end of file + "is_official": true, + "docker_url": "https://hub.docker.com/r/mcp/grafana" +} diff --git a/mcp-registry/servers/mcp-jetbrains.json b/mcp-registry/servers/mcp-jetbrains.json index c7aff0c8..6a089b53 100644 --- a/mcp-registry/servers/mcp-jetbrains.json +++ b/mcp-registry/servers/mcp-jetbrains.json @@ -16,6 +16,21 @@ "package": "@jetbrains/mcp-proxy", "description": "Install via npm package", "recommended": true + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "IDE_PORT", + "mcp/jetbrains" + ], + "env": { + "IDE_PORT": "${IDE_PORT}" + } } }, "homepage": "https://github.com/JetBrains/mcp-jetbrains", @@ -52,5 +67,6 @@ "tools": [], "prompts": [], "resources": [], - "is_official": true -} \ No newline at end of file + "is_official": true, + "docker_url": "https://hub.docker.com/r/mcp/jetbrains" +} diff --git a/mcp-registry/servers/mcp-obsidian.json b/mcp-registry/servers/mcp-obsidian.json new file mode 100644 index 00000000..198b4025 --- /dev/null +++ b/mcp-registry/servers/mcp-obsidian.json @@ -0,0 +1,354 @@ +{ + "display_name": "MCP server for Obsidian", + "license": "MIT", + "tags": [ + "obsidian", + "note-taking", + "knowledge-management", + "rest-api", + "mcp" + ], + "installations": { + "uvx": { + "type": "uvx", + "command": "uvx", + "args": [ + "mcp-obsidian" + ], + "env": { + "OBSIDIAN_API_KEY": "${OBSIDIAN_API_KEY}" + }, + "description": "Published server configuration using uvx" + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "OBSIDIAN_API_KEY", + "mcp/obsidian" + ], + "env": { + "OBSIDIAN_API_KEY": "${OBSIDIAN_API_KEY}" + } + } + }, + "arguments": { + "OBSIDIAN_API_KEY": { + "description": "Obsidian API key", + "required": true, + "example": "your-obsidian-api-key" + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "Get the contents of the last architecture call note and summarize them" + }, + { + "title": "", + "description": "", + "prompt": "Search for all files where Azure CosmosDb is mentioned and quickly explain to me the context in which it is mentioned" + }, + { + "title": "", + "description": "", + "prompt": "Summarize the last meeting notes and put them into a new note 'summary meeting.md'. Add an introduction so that I can send it via email." + } + ], + "name": "mcp-obsidian", + "repository": { + "type": "git", + "url": "https://github.com/MarkusPfundstein/mcp-obsidian" + }, + "homepage": "https://github.com/MarkusPfundstein/mcp-obsidian", + "author": { + "name": "MarkusPfundstein" + }, + "description": "MCP server to interact with Obsidian via the Local REST API community plugin.", + "categories": [ + "Knowledge Base" + ], + "tools": [ + { + "name": "obsidian_list_files_in_dir", + "description": "Lists all files and directories that exist in a specific Obsidian directory.", + "inputSchema": { + "type": "object", + "properties": { + "dirpath": { + "type": "string", + "description": "Path to list files from (relative to your vault root). Note that empty directories will not be returned." + } + }, + "required": [ + "dirpath" + ] + } + }, + { + "name": "obsidian_list_files_in_vault", + "description": "Lists all files and directories in the root directory of your Obsidian vault.", + "inputSchema": { + "type": "object", + "properties": {}, + "required": [] + } + }, + { + "name": "obsidian_get_file_contents", + "description": "Return the content of a single file in your vault.", + "inputSchema": { + "type": "object", + "properties": { + "filepath": { + "type": "string", + "description": "Path to the relevant file (relative to your vault root).", + "format": "path" + } + }, + "required": [ + "filepath" + ] + } + }, + { + "name": "obsidian_simple_search", + "description": "Simple search for documents matching a specified text query across all files in the vault. \n Use this tool when you want to do a simple text search", + "inputSchema": { + "type": "object", + "properties": { + "query": { + "type": "string", + "description": "Text to a simple search for in the vault." + }, + "context_length": { + "type": "integer", + "description": "How much context to return around the matching string (default: 100)", + "default": 100 + } + }, + "required": [ + "query" + ] + } + }, + { + "name": "obsidian_patch_content", + "description": "Insert content into an existing note relative to a heading, block reference, or frontmatter field.", + "inputSchema": { + "type": "object", + "properties": { + "filepath": { + "type": "string", + "description": "Path to the file (relative to vault root)", + "format": "path" + }, + "operation": { + "type": "string", + "description": "Operation to perform (append, prepend, or replace)", + "enum": [ + "append", + "prepend", + "replace" + ] + }, + "target_type": { + "type": "string", + "description": "Type of target to patch", + "enum": [ + "heading", + "block", + "frontmatter" + ] + }, + "target": { + "type": "string", + "description": "Target identifier (heading path, block reference, or frontmatter field)" + }, + "content": { + "type": "string", + "description": "Content to insert" + } + }, + "required": [ + "filepath", + "operation", + "target_type", + "target", + "content" + ] + } + }, + { + "name": "obsidian_append_content", + "description": "Append content to a new or existing file in the vault.", + "inputSchema": { + "type": "object", + "properties": { + "filepath": { + "type": "string", + "description": "Path to the file (relative to vault root)", + "format": "path" + }, + "content": { + "type": "string", + "description": "Content to append to the file" + } + }, + "required": [ + "filepath", + "content" + ] + } + }, + { + "name": "obsidian_delete_file", + "description": "Delete a file or directory from the vault.", + "inputSchema": { + "type": "object", + "properties": { + "filepath": { + "type": "string", + "description": "Path to the file or directory to delete (relative to vault root)", + "format": "path" + }, + "confirm": { + "type": "boolean", + "description": "Confirmation to delete the file (must be true)", + "default": false + } + }, + "required": [ + "filepath", + "confirm" + ] + } + }, + { + "name": "obsidian_complex_search", + "description": "Complex search for documents using a JsonLogic query. \n Supports standard JsonLogic operators plus 'glob' and 'regexp' for pattern matching. Results must be non-falsy.\n\n Use this tool when you want to do a complex search, e.g. for all documents with certain tags etc.\n ", + "inputSchema": { + "type": "object", + "properties": { + "query": { + "type": "object", + "description": "JsonLogic query object. Example: {\"glob\": [\"*.md\", {\"var\": \"path\"}]} matches all markdown files" + } + }, + "required": [ + "query" + ] + } + }, + { + "name": "obsidian_batch_get_file_contents", + "description": "Return the contents of multiple files in your vault, concatenated with headers.", + "inputSchema": { + "type": "object", + "properties": { + "filepaths": { + "type": "array", + "items": { + "type": "string", + "description": "Path to a file (relative to your vault root)", + "format": "path" + }, + "description": "List of file paths to read" + } + }, + "required": [ + "filepaths" + ] + } + }, + { + "name": "obsidian_get_periodic_note", + "description": "Get current periodic note for the specified period.", + "inputSchema": { + "type": "object", + "properties": { + "period": { + "type": "string", + "description": "The period type (daily, weekly, monthly, quarterly, yearly)", + "enum": [ + "daily", + "weekly", + "monthly", + "quarterly", + "yearly" + ] + } + }, + "required": [ + "period" + ] + } + }, + { + "name": "obsidian_get_recent_periodic_notes", + "description": "Get most recent periodic notes for the specified period type.", + "inputSchema": { + "type": "object", + "properties": { + "period": { + "type": "string", + "description": "The period type (daily, weekly, monthly, quarterly, yearly)", + "enum": [ + "daily", + "weekly", + "monthly", + "quarterly", + "yearly" + ] + }, + "limit": { + "type": "integer", + "description": "Maximum number of notes to return (default: 5)", + "default": 5, + "minimum": 1, + "maximum": 50 + }, + "include_content": { + "type": "boolean", + "description": "Whether to include note content (default: false)", + "default": false + } + }, + "required": [ + "period" + ] + } + }, + { + "name": "obsidian_get_recent_changes", + "description": "Get recently modified files in the vault.", + "inputSchema": { + "type": "object", + "properties": { + "limit": { + "type": "integer", + "description": "Maximum number of files to return (default: 10)", + "default": 10, + "minimum": 1, + "maximum": 100 + }, + "days": { + "type": "integer", + "description": "Only include files modified within this many days (default: 90)", + "minimum": 1, + "default": 90 + } + } + } + } + ], + "prompts": [], + "resources": [], + "is_official": false, + "docker_url": "https://hub.docker.com/r/mcp/obsidian" +} diff --git a/mcp-registry/servers/mcp-redis.json b/mcp-registry/servers/mcp-redis.json new file mode 100644 index 00000000..c921ee8b --- /dev/null +++ b/mcp-registry/servers/mcp-redis.json @@ -0,0 +1,161 @@ +{ + "display_name": "Redis MCP Server", + "license": "MIT License", + "tags": [ + "redis", + "database", + "natural language interface", + "MCP", + "Model Content Protocol", + "data management", + "search", + "vector search", + "caching", + "streams", + "JSON" + ], + "installations": { + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "REDIS_HOST", + "-e", + "REDIS_PORT", + "-e", + "REDIS_USERNAME", + "-e", + "REDIS_SSL", + "-e", + "REDIS_PWD", + "mcp/redis" + ], + "env": { + "REDIS_HOST": "${REDIS_HOST}", + "REDIS_PORT": "${REDIS_PORT}", + "REDIS_USERNAME": "${REDIS_USERNAME}", + "REDIS_SSL": "${REDIS_SSL}", + "REDIS_PWD": "${REDIS_PWD}" + }, + "description": "Run the Redis MCP Server using Docker" + } + }, + "arguments": { + "REDIS_HOST": { + "description": "Redis host address.", + "required": true, + "example": "127.0.0.1" + }, + "REDIS_PORT": { + "description": "Redis port number.", + "required": true, + "example": "6379" + }, + "REDIS_USERNAME": { + "description": "Redis username.", + "required": true, + "example": "default" + }, + "REDIS_SSL": { + "description": "Enable SSL connection.", + "required": true, + "example": "False" + }, + "REDIS_PWD": { + "description": "Redis password.", + "required": true, + "example": "your password" + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "Store the entire conversation in a stream" + }, + { + "title": "", + "description": "", + "prompt": "Cache this item" + }, + { + "title": "", + "description": "", + "prompt": "Store the session with an expiration time" + }, + { + "title": "", + "description": "", + "prompt": "Index and search this vector" + }, + { + "title": "", + "description": "", + "prompt": "Set a string value with expiration" + }, + { + "title": "", + "description": "", + "prompt": "Store user profile data in a hash" + }, + { + "title": "", + "description": "", + "prompt": "Add items to a queue using a list" + }, + { + "title": "", + "description": "", + "prompt": "Track unique user IDs in a set" + }, + { + "title": "", + "description": "", + "prompt": "Create a leaderboard using a sorted set" + }, + { + "title": "", + "description": "", + "prompt": "Publish a message to a channel" + }, + { + "title": "", + "description": "", + "prompt": "Add event data to a stream" + }, + { + "title": "", + "description": "", + "prompt": "Store and retrieve a JSON document" + }, + { + "title": "", + "description": "", + "prompt": "Perform vector search on indexed data" + }, + { + "title": "", + "description": "", + "prompt": "Get information about the Redis database" + } + ], + "name": "mcp-redis", + "repository": { + "type": "git", + "url": "https://github.com/redis/mcp-redis" + }, + "homepage": "https://github.com/redis/mcp-redis", + "author": { + "name": "redis" + }, + "description": "The Redis MCP Server is a natural language interface designed for AI applications to efficiently manage and search data in Redis, enabling AI-driven workflows to interact with structured and unstructured data using natural language queries.", + "categories": [ + "Databases" + ], + "is_official": true, + "docker_url": "https://hub.docker.com/r/mcp/redis" +} diff --git a/mcp-registry/servers/mcp-send-email.json b/mcp-registry/servers/mcp-send-email.json new file mode 100644 index 00000000..f5f80863 --- /dev/null +++ b/mcp-registry/servers/mcp-send-email.json @@ -0,0 +1,108 @@ +{ + "display_name": "Email Sending MCP", + "license": "", + "tags": [ + "email", + "resend", + "mcp", + "anthropic", + "cursor", + "claude" + ], + "installations": { + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "REPLY_TO_EMAIL_ADDRESSES", + "-e", + "SENDER_EMAIL_ADDRESS", + "-e", + "RESEND_API_KEY", + "mcp/resend" + ], + "env": { + "REPLY_TO_EMAIL_ADDRESSES": "${REPLY_TO_EMAIL_ADDRESSES}", + "SENDER_EMAIL_ADDRESS": "${SENDER_EMAIL_ADDRESS}", + "RESEND_API_KEY": "${RESEND_API_KEY}" + }, + "description": "Published server configuration using docker" + }, + "cli": { + "type": "cli", + "command": "node", + "args": [ + "ABSOLUTE_PATH_TO_MCP_SERVER/build/index.js" + ], + "env": { + "RESEND_API_KEY": "${RESEND_API_KEY}", + "SENDER_EMAIL_ADDRESS": "${SENDER_EMAIL_ADDRESS}", + "REPLY_TO_EMAIL_ADDRESSES": "${REPLY_TO_EMAIL_ADDRESSES}" + }, + "description": "Local Deployment" + } + }, + "arguments": { + "RESEND_API_KEY": { + "description": "Resend API key", + "required": true, + "example": "your-resend-api-key" + }, + "SENDER_EMAIL_ADDRESS": { + "description": "Sender email address", + "required": true, + "example": "sender@example.com" + }, + "REPLY_TO_EMAIL_ADDRESSES": { + "description": "Reply-to email addresses (comma-delimited)", + "required": true, + "example": "reply1@example.com,reply2@example.com" + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "Send an email to john@example.com with the subject 'Meeting tomorrow' and body 'Hi John, just confirming our meeting tomorrow at 2pm.'" + }, + { + "title": "", + "description": "", + "prompt": "Draft an HTML email to team@company.com about the new product launch" + }, + { + "title": "", + "description": "", + "prompt": "Schedule an email to client@business.com for next Monday with the quarterly report" + }, + { + "title": "", + "description": "", + "prompt": "Send an email to sarah@example.com with CC to manager@example.com" + }, + { + "title": "", + "description": "", + "prompt": "Compose and send a follow-up email to candidates@hiring.com with BCC to hr@company.com" + } + ], + "name": "mcp-send-email", + "repository": { + "type": "git", + "url": "https://github.com/resend/mcp-send-email" + }, + "homepage": "https://github.com/resend/mcp-send-email", + "author": { + "name": "resend" + }, + "description": "This is a simple MCP server that sends emails using Resend's API. Why? Now you can let Cursor or Claude Desktop compose emails for you and send it right away without having to copy and paste the email content.", + "categories": [ + "Messaging" + ], + "is_official": false, + "docker_url": "https://hub.docker.com/r/mcp/resend" +} diff --git a/mcp-registry/servers/mcp-server-neon.json b/mcp-registry/servers/mcp-server-neon.json index 5fb93984..064cf9c4 100644 --- a/mcp-registry/servers/mcp-server-neon.json +++ b/mcp-registry/servers/mcp-server-neon.json @@ -23,18 +23,35 @@ } }, "installations": { - "cli": { - "type": "cli", + "npm": { + "type": "npm", "command": "npx", "args": [ + "-y", "@neondatabase/mcp-server-neon", - "init", - "$NEON_API_KEY" + "start", + "${NEON_API_KEY}" ], "package": "@neondatabase/mcp-server-neon", "env": {}, "description": "Install via npm", "recommended": true + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "NEON_API_KEY", + "mcp/neon" + ], + "env": { + "NEON_API_KEY": "${NEON_API_KEY}" + }, + "description": "Install via docker" } }, "examples": [ @@ -64,5 +81,6 @@ "categories": [ "Databases" ], - "is_official": true -} \ No newline at end of file + "is_official": true, + "docker_url": "https://hub.docker.com/r/mcp/neon" +} diff --git a/mcp-registry/servers/notion-mcp.json b/mcp-registry/servers/notion-mcp.json new file mode 100644 index 00000000..1644303f --- /dev/null +++ b/mcp-registry/servers/notion-mcp.json @@ -0,0 +1,1037 @@ +{ + "display_name": "Notion MCP Server", + "license": "MIT", + "tags": [ + "notion", + "mcp", + "api", + "model-context-protocol", + "integration", + "notion-api" + ], + "installations": { + "npm": { + "type": "npm", + "command": "npx", + "args": [ + "-y", + "@notionhq/notion-mcp-server" + ], + "env": { + "OPENAPI_MCP_HEADERS": "${OPENAPI_MCP_HEADERS}" + }, + "description": "Using npm to run the Notion MCP server" + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "INTERNAL_INTEGRATION_TOKEN", + "mcp/notion" + ], + "env": { + "INTERNAL_INTEGRATION_TOKEN": "${INTERNAL_INTEGRATION_TOKEN}" + }, + "description": "Using Docker to run the Notion MCP server", + "recommended": true + } + }, + "arguments": { + "OPENAPI_MCP_HEADERS": { + "description": "OpenAPI MCP headers with internal integration token and notion version", + "required": true, + "example": "{\"Authorization\": \"Bearer ntn_****\", \"Notion-Version\": \"2022-06-28\" }" + }, + "INTERNAL_INTEGRATION_TOKEN": { + "description": "Internal integration token", + "required": true, + "example": "ntn_****" + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "Comment \"Hello MCP\" on page \"Getting started\"" + }, + { + "title": "", + "description": "", + "prompt": "Add a page titled \"Notion MCP\" to page \"Development\"" + }, + { + "title": "", + "description": "", + "prompt": "Get the content of page 1a6b35e6e67f802fa7e1d27686f017f2" + }, + { + "title": "", + "description": "", + "prompt": "Search for pages with title containing \"meeting notes\"" + }, + { + "title": "", + "description": "", + "prompt": "Create a new database in my Notion workspace" + }, + { + "title": "", + "description": "", + "prompt": "Update the properties of page \"Project Plan\"" + }, + { + "title": "", + "description": "", + "prompt": "List all databases I have access to" + }, + { + "title": "", + "description": "", + "prompt": "Add a new item to my \"Tasks\" database" + } + ], + "name": "notion-mcp", + "repository": { + "type": "git", + "url": "https://github.com/makenotion/notion-mcp-server" + }, + "homepage": "https://github.com/makenotion/notion-mcp-server", + "author": { + "name": "makenotion" + }, + "description": "This project implements an [MCP server](https://spec.modelcontextprotocol.io/) for the [Notion API](https://developers.notion.com/reference/intro).", + "categories": [ + "Productivity" + ], + "tools": [ + { + "name": "API-get-user", + "description": "Retrieve a user\nError Responses:\n400: 400", + "inputSchema": { + "$defs": {}, + "type": "object", + "properties": { + "user_id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "user_id" + ] + } + }, + { + "name": "API-get-users", + "description": "List all users\nError Responses:\n400: 400", + "inputSchema": { + "$defs": {}, + "type": "object", + "properties": { + "start_cursor": { + "type": "string", + "description": "If supplied, this endpoint will return a page of results starting after the cursor provided. If not supplied, this endpoint will return the first page of results." + }, + "page_size": { + "type": "integer", + "default": 100, + "description": "The number of items from the full list desired in the response. Maximum: 100" + } + }, + "required": [] + } + }, + { + "name": "API-get-self", + "description": "Retrieve your token's bot user", + "inputSchema": { + "$defs": {}, + "type": "object", + "properties": {}, + "required": [] + } + }, + { + "name": "API-post-database-query", + "description": "Query a database", + "inputSchema": { + "$defs": {}, + "type": "object", + "properties": { + "database_id": { + "type": "string", + "description": "Identifier for a Notion database." + }, + "filter_properties": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of page property value IDs associated with the database. Use this param to limit the response to a specific page property value or values for pages that meet the `filter` criteria." + }, + "filter": { + "type": "object", + "description": "When supplied, limits which pages are returned based on the [filter conditions](ref:post-database-query-filter).", + "additionalProperties": true + }, + "sorts": { + "type": "array", + "description": "When supplied, orders the results based on the provided [sort criteria](ref:post-database-query-sort).", + "items": { + "type": "object", + "properties": { + "property": { + "type": "string" + }, + "direction": { + "enum": [ + "ascending", + "descending" + ] + } + }, + "required": [ + "property", + "direction" + ], + "additionalProperties": true + } + }, + "start_cursor": { + "type": "string", + "description": "When supplied, returns a page of results starting after the cursor provided. If not supplied, this endpoint will return the first page of results." + }, + "page_size": { + "type": "integer", + "description": "The number of items from the full list desired in the response. Maximum: 100", + "default": 100 + }, + "archived": { + "type": "boolean" + }, + "in_trash": { + "type": "boolean" + } + }, + "required": [ + "database_id" + ] + } + }, + { + "name": "API-post-search", + "description": "Search by title", + "inputSchema": { + "$defs": {}, + "type": "object", + "properties": { + "query": { + "type": "string", + "description": "The text that the API compares page and database titles against." + }, + "sort": { + "type": "object", + "description": "A set of criteria, `direction` and `timestamp` keys, that orders the results. The **only** supported timestamp value is `\"last_edited_time\"`. Supported `direction` values are `\"ascending\"` and `\"descending\"`. If `sort` is not provided, then the most recently edited results are returned first.", + "properties": { + "direction": { + "type": "string", + "description": "The direction to sort. Possible values include `ascending` and `descending`." + }, + "timestamp": { + "type": "string", + "description": "The name of the timestamp to sort against. Possible values include `last_edited_time`." + } + }, + "additionalProperties": true + }, + "filter": { + "type": "object", + "description": "A set of criteria, `value` and `property` keys, that limits the results to either only pages or only databases. Possible `value` values are `\"page\"` or `\"database\"`. The only supported `property` value is `\"object\"`.", + "properties": { + "value": { + "type": "string", + "description": "The value of the property to filter the results by. Possible values for object type include `page` or `database`. **Limitation**: Currently the only filter allowed is `object` which will filter by type of object (either `page` or `database`)" + }, + "property": { + "type": "string", + "description": "The name of the property to filter by. Currently the only property you can filter by is the object type. Possible values include `object`. Limitation: Currently the only filter allowed is `object` which will filter by type of object (either `page` or `database`)" + } + }, + "additionalProperties": true + }, + "start_cursor": { + "type": "string", + "description": "A `cursor` value returned in a previous response that If supplied, limits the response to results starting after the `cursor`. If not supplied, then the first page of results is returned. Refer to [pagination](https://developers.notion.com/reference/intro#pagination) for more details." + }, + "page_size": { + "type": "integer", + "format": "int32", + "description": "The number of items from the full list to include in the response. Maximum: `100`.", + "default": 100 + } + }, + "required": [] + } + }, + { + "name": "API-get-block-children", + "description": "Retrieve block children", + "inputSchema": { + "$defs": {}, + "type": "object", + "properties": { + "block_id": { + "type": "string", + "description": "Identifier for a [block](ref:block)" + }, + "start_cursor": { + "type": "string", + "description": "If supplied, this endpoint will return a page of results starting after the cursor provided. If not supplied, this endpoint will return the first page of results." + }, + "page_size": { + "type": "integer", + "format": "int32", + "default": 100, + "description": "The number of items from the full list desired in the response. Maximum: 100" + } + }, + "required": [ + "block_id" + ] + } + }, + { + "name": "API-patch-block-children", + "description": "Append block children", + "inputSchema": { + "$defs": {}, + "type": "object", + "properties": { + "block_id": { + "type": "string", + "description": "Identifier for a [block](ref:block). Also accepts a [page](ref:page) ID." + }, + "children": { + "type": "array", + "description": "Child content to append to a container block as an array of [block objects](ref:block)", + "items": { + "type": "object", + "properties": { + "paragraph": { + "type": "object", + "properties": { + "rich_text": { + "type": "array", + "items": { + "type": "object", + "properties": { + "text": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "link": { + "type": [ + "object", + "null" + ] + } + }, + "required": [ + "content" + ], + "additionalProperties": false + }, + "type": { + "enum": [ + "text" + ] + } + }, + "required": [ + "text" + ], + "additionalProperties": false + } + } + }, + "required": [ + "rich_text" + ], + "additionalProperties": false + }, + "bulleted_list_item": { + "type": "object", + "properties": { + "rich_text": { + "type": "array", + "items": { + "type": "object", + "properties": { + "text": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "link": { + "type": [ + "object", + "null" + ] + } + }, + "required": [ + "content" + ], + "additionalProperties": false + }, + "type": { + "enum": [ + "text" + ] + } + }, + "required": [ + "text" + ], + "additionalProperties": false + } + } + }, + "required": [ + "rich_text" + ], + "additionalProperties": false + }, + "type": { + "enum": [ + "paragraph", + "bulleted_list_item" + ] + } + }, + "additionalProperties": false + } + }, + "after": { + "type": "string", + "description": "The ID of the existing block that the new block should be appended after." + } + }, + "required": [ + "block_id", + "children" + ] + } + }, + { + "name": "API-retrieve-a-block", + "description": "Retrieve a block", + "inputSchema": { + "$defs": {}, + "type": "object", + "properties": { + "block_id": { + "type": "string", + "description": "Identifier for a Notion block" + } + }, + "required": [ + "block_id" + ] + } + }, + { + "name": "API-update-a-block", + "description": "Update a block", + "inputSchema": { + "$defs": {}, + "type": "object", + "properties": { + "block_id": { + "type": "string", + "description": "Identifier for a Notion block" + }, + "type": { + "type": "object", + "description": "The [block object `type`](ref:block#block-object-keys) value with the properties to be updated. Currently only `text` (for supported block types) and `checked` (for `to_do` blocks) fields can be updated.", + "properties": {}, + "additionalProperties": true + }, + "archived": { + "type": "boolean", + "description": "Set to true to archive (delete) a block. Set to false to un-archive (restore) a block.", + "default": true + } + }, + "required": [ + "block_id" + ] + } + }, + { + "name": "API-delete-a-block", + "description": "Delete a block", + "inputSchema": { + "$defs": {}, + "type": "object", + "properties": { + "block_id": { + "type": "string", + "description": "Identifier for a Notion block" + } + }, + "required": [ + "block_id" + ] + } + }, + { + "name": "API-retrieve-a-page", + "description": "Retrieve a page", + "inputSchema": { + "$defs": {}, + "type": "object", + "properties": { + "page_id": { + "type": "string", + "description": "Identifier for a Notion page" + }, + "filter_properties": { + "type": "string", + "description": "A list of page property value IDs associated with the page. Use this param to limit the response to a specific page property value or values. To retrieve multiple properties, specify each page property ID. For example: `?filter_properties=iAk8&filter_properties=b7dh`." + } + }, + "required": [ + "page_id" + ] + } + }, + { + "name": "API-patch-page", + "description": "Update page properties", + "inputSchema": { + "$defs": {}, + "type": "object", + "properties": { + "page_id": { + "type": "string", + "description": "The identifier for the Notion page to be updated." + }, + "properties": { + "type": "object", + "description": "The property values to update for the page. The keys are the names or IDs of the property and the values are property values. If a page property ID is not included, then it is not changed.", + "properties": { + "title": { + "type": "array", + "items": { + "type": "object", + "properties": { + "text": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "link": { + "type": [ + "object", + "null" + ] + } + }, + "required": [ + "content" + ], + "additionalProperties": false + }, + "type": { + "enum": [ + "text" + ] + } + }, + "required": [ + "text" + ], + "additionalProperties": false + } + }, + "type": { + "enum": [ + "title" + ] + } + }, + "required": [ + "title" + ], + "additionalProperties": false + }, + "in_trash": { + "type": "boolean", + "description": "Set to true to delete a block. Set to false to restore a block.", + "default": false + }, + "archived": { + "type": "boolean" + }, + "icon": { + "type": "object", + "description": "A page icon for the page. Supported types are [external file object](https://developers.notion.com/reference/file-object) or [emoji object](https://developers.notion.com/reference/emoji-object).", + "properties": { + "emoji": { + "type": "string" + } + }, + "required": [ + "emoji" + ], + "additionalProperties": false + }, + "cover": { + "type": "object", + "description": "A cover image for the page. Only [external file objects](https://developers.notion.com/reference/file-object) are supported.", + "properties": { + "external": { + "type": "object", + "properties": { + "url": { + "type": "string" + } + }, + "required": [ + "url" + ], + "additionalProperties": false + }, + "type": { + "enum": [ + "external" + ] + } + }, + "required": [ + "external" + ], + "additionalProperties": false + } + }, + "required": [ + "page_id" + ] + } + }, + { + "name": "API-post-page", + "description": "Create a page", + "inputSchema": { + "$defs": {}, + "type": "object", + "properties": { + "parent": { + "type": "object", + "properties": { + "page_id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "page_id" + ], + "additionalProperties": true + }, + "properties": { + "type": "object", + "properties": { + "title": { + "type": "array", + "items": { + "type": "object", + "properties": { + "text": { + "type": "object", + "properties": { + "content": { + "type": "string" + } + }, + "required": [ + "content" + ], + "additionalProperties": true + } + }, + "required": [ + "text" + ], + "additionalProperties": true + } + }, + "type": { + "enum": [ + "title" + ] + } + }, + "required": [ + "title" + ], + "additionalProperties": false + }, + "children": { + "type": "array", + "description": "The content to be rendered on the new page, represented as an array of [block objects](https://developers.notion.com/reference/block).", + "items": { + "type": "string" + } + }, + "icon": { + "type": "string", + "format": "json", + "description": "The icon of the new page. Either an [emoji object](https://developers.notion.com/reference/emoji-object) or an [external file object](https://developers.notion.com/reference/file-object).." + }, + "cover": { + "type": "string", + "format": "json", + "description": "The cover image of the new page, represented as a [file object](https://developers.notion.com/reference/file-object)." + } + }, + "required": [ + "parent", + "properties" + ] + } + }, + { + "name": "API-create-a-database", + "description": "Create a database", + "inputSchema": { + "$defs": {}, + "type": "object", + "properties": { + "parent": { + "type": "object", + "properties": { + "type": { + "enum": [ + "page_id" + ] + }, + "page_id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "type", + "page_id" + ], + "additionalProperties": true + }, + "properties": { + "type": "object", + "description": "Property schema of database. The keys are the names of properties as they appear in Notion and the values are [property schema objects](https://developers.notion.com/reference/property-schema-object).", + "additionalProperties": { + "oneOf": [ + { + "type": "object", + "properties": { + "title": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "description": { + "type": "string" + } + }, + "required": [ + "title" + ], + "additionalProperties": false + } + ] + } + }, + "title": { + "type": "array", + "items": { + "type": "object", + "properties": { + "text": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "link": { + "type": [ + "object", + "null" + ] + } + }, + "required": [ + "content" + ], + "additionalProperties": false + }, + "type": { + "enum": [ + "text" + ] + } + }, + "required": [ + "text" + ], + "additionalProperties": false + } + } + }, + "required": [ + "parent", + "properties" + ] + } + }, + { + "name": "API-update-a-database", + "description": "Update a database", + "inputSchema": { + "$defs": {}, + "type": "object", + "properties": { + "database_id": { + "type": "string", + "description": "identifier for a Notion database" + }, + "title": { + "type": "array", + "description": "An array of [rich text objects](https://developers.notion.com/reference/rich-text) that represents the title of the database that is displayed in the Notion UI. If omitted, then the database title remains unchanged.", + "items": { + "type": "object", + "properties": { + "text": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "link": { + "type": [ + "object", + "null" + ] + } + }, + "required": [ + "content" + ], + "additionalProperties": false + }, + "type": { + "enum": [ + "text" + ] + } + }, + "required": [ + "text" + ], + "additionalProperties": false + } + }, + "description": { + "type": "array", + "description": "An array of [rich text objects](https://developers.notion.com/reference/rich-text) that represents the description of the database that is displayed in the Notion UI. If omitted, then the database description remains unchanged.", + "items": { + "type": "object", + "properties": { + "text": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "link": { + "type": [ + "object", + "null" + ] + } + }, + "required": [ + "content" + ], + "additionalProperties": false + }, + "type": { + "enum": [ + "text" + ] + } + }, + "required": [ + "text" + ], + "additionalProperties": false + } + }, + "properties": { + "type": "object", + "description": "Property schema of database. The keys are the names of properties as they appear in Notion and the values are [property schema objects](https://developers.notion.com/reference/property-schema-object).", + "properties": { + "name": { + "type": "string" + } + }, + "additionalProperties": true + } + }, + "required": [ + "database_id" + ] + } + }, + { + "name": "API-retrieve-a-database", + "description": "Retrieve a database", + "inputSchema": { + "$defs": {}, + "type": "object", + "properties": { + "database_id": { + "type": "string", + "description": "An identifier for the Notion database." + } + }, + "required": [ + "database_id" + ] + } + }, + { + "name": "API-retrieve-a-page-property", + "description": "Retrieve a page property item", + "inputSchema": { + "$defs": {}, + "type": "object", + "properties": { + "page_id": { + "type": "string", + "description": "Identifier for a Notion page" + }, + "property_id": { + "type": "string", + "description": "Identifier for a page [property](https://developers.notion.com/reference/page#all-property-values)" + }, + "page_size": { + "type": "integer", + "format": "int32", + "description": "For paginated properties. The max number of property item objects on a page. The default size is 100" + }, + "start_cursor": { + "type": "string", + "description": "For paginated properties." + } + }, + "required": [ + "page_id", + "property_id" + ] + } + }, + { + "name": "API-retrieve-a-comment", + "description": "Retrieve comments", + "inputSchema": { + "$defs": {}, + "type": "object", + "properties": { + "block_id": { + "type": "string", + "description": "Identifier for a Notion block or page" + }, + "start_cursor": { + "type": "string", + "description": "If supplied, this endpoint will return a page of results starting after the cursor provided. If not supplied, this endpoint will return the first page of results." + }, + "page_size": { + "type": "integer", + "format": "int32", + "description": "The number of items from the full list desired in the response. Maximum: 100" + } + }, + "required": [ + "block_id" + ] + } + }, + { + "name": "API-create-a-comment", + "description": "Create comment", + "inputSchema": { + "$defs": {}, + "type": "object", + "properties": { + "parent": { + "type": "object", + "description": "The page that contains the comment", + "properties": { + "page_id": { + "type": "string", + "description": "the page ID" + } + }, + "required": [ + "page_id" + ], + "additionalProperties": true + }, + "rich_text": { + "type": "array", + "items": { + "type": "object", + "properties": { + "text": { + "type": "object", + "properties": { + "content": { + "type": "string", + "description": "The content of the comment" + } + }, + "required": [ + "content" + ], + "additionalProperties": true + } + }, + "required": [ + "text" + ], + "additionalProperties": true + } + } + }, + "required": [ + "parent", + "rich_text" + ] + } + } + ], + "prompts": [], + "resources": [], + "is_official": false, + "docker_url": "https://hub.docker.com/r/mcp/notion" +} diff --git a/mcp-registry/servers/notion.json b/mcp-registry/servers/notion.json index 5319cf73..b2e744e1 100644 --- a/mcp-registry/servers/notion.json +++ b/mcp-registry/servers/notion.json @@ -37,4 +37,4 @@ "example": "your_notion_api_key_here" } } -} \ No newline at end of file +} diff --git a/mcp-registry/servers/open-strategy-partners-marketing-tools.json b/mcp-registry/servers/open-strategy-partners-marketing-tools.json index 871a3c31..bd70843e 100644 --- a/mcp-registry/servers/open-strategy-partners-marketing-tools.json +++ b/mcp-registry/servers/open-strategy-partners-marketing-tools.json @@ -28,6 +28,16 @@ "git+https://github.com/open-strategy-partners/osp_marketing_tools@main", "osp_marketing_tools" ] + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "mcp/osp_marketing_tools" + ] } }, "examples": [ @@ -107,5 +117,6 @@ "type": "object" } } - ] -} \ No newline at end of file + ], + "docker_url": "https://hub.docker.com/r/mcp/osp_marketing_tools" +} diff --git a/mcp-registry/servers/openapi-schema.json b/mcp-registry/servers/openapi-schema.json index cd466251..ee58d700 100644 --- a/mcp-registry/servers/openapi-schema.json +++ b/mcp-registry/servers/openapi-schema.json @@ -27,6 +27,16 @@ "mcp-openapi-schema", "${ABSOLUTE_PATH_TO_OPENAPI_YAML}" ] + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "mcp/openapi-schema" + ] } }, "arguments": { @@ -215,5 +225,6 @@ ] } } - ] -} \ No newline at end of file + ], + "docker_url": "https://hub.docker.com/r/mcp/openapi-schema" +} diff --git a/mcp-registry/servers/oxylabs-mcp.json b/mcp-registry/servers/oxylabs-mcp.json index bdfeb788..29bd07e7 100644 --- a/mcp-registry/servers/oxylabs-mcp.json +++ b/mcp-registry/servers/oxylabs-mcp.json @@ -14,23 +14,6 @@ "data extraction", "web unblocker" ], - "arguments": { - "url": { - "description": "The URL to scrape", - "required": true, - "example": "https://www.google.com/search?q=ai" - }, - "parse": { - "description": "Enable structured data extraction", - "required": false, - "example": "True" - }, - "render": { - "description": "Use headless browser rendering", - "required": false, - "example": "html" - } - }, "installations": { "uvx": { "type": "uvx", @@ -39,10 +22,41 @@ "oxylabs-mcp" ], "env": { - "OXYLABS_USERNAME": "YOUR_USERNAME_HERE", - "OXYLABS_PASSWORD": "YOUR_PASSWORD_HERE" + "OXYLABS_USERNAME": "${OXYLABS_USERNAME}", + "OXYLABS_PASSWORD": "${OXYLABS_PASSWORD}" }, "description": "Install using uv in Claude Desktop" + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "OXYLABS_USERNAME", + "-e", + "OXYLABS_PASSWORD", + "mcp/oxylabs" + ], + "env": { + "OXYLABS_USERNAME": "${OXYLABS_USERNAME}", + "OXYLABS_PASSWORD": "${OXYLABS_PASSWORD}" + }, + "description": "Install using Docker" + } + }, + "arguments": { + "OXYLABS_USERNAME": { + "description": "Oxylabs username", + "required": true, + "example": "YOUR_USERNAME_HERE" + }, + "OXYLABS_PASSWORD": { + "description": "Oxylabs password", + "required": true, + "example": "YOUR_PASSWORD_HERE" } }, "examples": [ @@ -157,5 +171,6 @@ "type": "object" } } - ] -} \ No newline at end of file + ], + "docker_url": "https://hub.docker.com/r/mcp/oxylabs" +} diff --git a/mcp-registry/servers/puppeteer.json b/mcp-registry/servers/puppeteer.json index 9a20c108..772f97e8 100644 --- a/mcp-registry/servers/puppeteer.json +++ b/mcp-registry/servers/puppeteer.json @@ -179,5 +179,6 @@ } } ], - "is_official": true -} \ No newline at end of file + "is_official": true, + "docker_url": "https://hub.docker.com/r/mcp/puppeteer" +} diff --git a/mcp-registry/servers/sandbox-mcp.json b/mcp-registry/servers/sandbox-mcp.json new file mode 100644 index 00000000..1821bc55 --- /dev/null +++ b/mcp-registry/servers/sandbox-mcp.json @@ -0,0 +1,391 @@ +{ + "display_name": "302AI Sandbox MCP Server", + "license": "MIT", + "tags": [ + "code execution", + "sandbox", + "MCP", + "AI tools", + "code sandbox", + "development tools" + ], + "installations": { + "npm": { + "type": "npm", + "command": "npx", + "args": [ + "-y", + "@302ai/sandbox-mcp" + ], + "env": { + "302AI_API_KEY": "${302AI_API_KEY}" + } + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "302AI_API_KEY", + "mcp/302_sandbox" + ], + "env": { + "302AI_API_KEY": "${302AI_API_KEY}" + } + } + }, + "arguments": { + "302AI_API_KEY": { + "description": "Your 302AI API key", + "required": true, + "example": "your-302ai-api-key" + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "Can you help me execute some Python code to calculate the Fibonacci sequence?" + }, + { + "title": "", + "description": "", + "prompt": "I need to create a sandbox environment to test some JavaScript code." + }, + { + "title": "", + "description": "", + "prompt": "Can you run this bash command for me: ls -la" + }, + { + "title": "", + "description": "", + "prompt": "Help me write and execute a simple HTML/CSS webpage." + }, + { + "title": "", + "description": "", + "prompt": "I need to import a CSV file into the sandbox and analyze it with Python." + }, + { + "title": "", + "description": "", + "prompt": "Can you create a sandbox and then run a Node.js script in it?" + }, + { + "title": "", + "description": "", + "prompt": "Show me how to query the files in my sandbox environment." + }, + { + "title": "", + "description": "", + "prompt": "I want to export the files from my sandbox after I've finished working on them." + } + ], + "name": "sandbox-mcp", + "repository": { + "type": "git", + "url": "https://github.com/302ai/302_sandbox_mcp" + }, + "homepage": "https://github.com/302ai/302_sandbox_mcp", + "author": { + "name": "302ai" + }, + "description": "Here is a concise description paragraph focused on what the project does:\n\nThe 302AI Sandbox MCP Server is an MCP service that provides a secure code sandbox environment, allowing AI assistants to safely execute arbitrary code from various programming languages and tools without compromising system security.", + "categories": [ + "Dev Tools" + ], + "tools": [ + { + "name": "downloadSandboxFiles", + "description": "Export files from a sandbox directory or file path to downloadable urls. Supports batch export of multiple directories or files. When exporting directories, only common file formats are included (documents, images, audio, video, compressed files, web files, and programming language files).", + "inputSchema": { + "type": "object", + "properties": { + "sandbox_id": { + "type": "string", + "description": "The ID of the sandbox to export files from" + }, + "path": { + "description": "Path(s) to export from the sandbox." + } + }, + "required": [ + "sandbox_id", + "path" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "listSandboxes", + "description": "Query the list of sandboxes associated with the current API key. If no parameters are passed, all current sandboxes will be returned.", + "inputSchema": { + "type": "object", + "properties": { + "sandbox_name": { + "type": "string", + "description": "Filter by sandbox name provided during creation (optional)" + }, + "sandbox_id": { + "type": "string", + "description": "Filter by sandbox ID (optional)" + } + }, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "createSandbox", + "description": "Create a Linux sandbox that can execute code, run commands, upload and download files, and has complete Linux functionality. After successful creation, a sandbox_id will be returned, and all subsequent operations will need to include this sandbox_id to specify the corresponding sandbox. After successful creation, the sandbox will automatically pause. When calling other sandbox operation interfaces later, it will automatically reconnect and pause again after execution to avoid generating extra costs.", + "inputSchema": { + "type": "object", + "properties": { + "max_alive_time": { + "type": "integer", + "description": "Maximum alive time of the sandbox (seconds), recommand 300." + }, + "sandbox_name": { + "type": "string", + "description": "Custom sandbox name (optional)" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Sandbox metadata (optional)" + }, + "envs": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Environment variables to set (optional)" + } + }, + "required": [ + "max_alive_time" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "killSandbox", + "description": "Destroy a sandbox by its ID.", + "inputSchema": { + "type": "object", + "properties": { + "sandbox_id": { + "type": "string", + "description": "The ID of the sandbox to destroy" + } + }, + "required": [ + "sandbox_id" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "directRunCode", + "description": "Automatically creates a sandbox, executes code, and immediately destroys the sandbox after execution. Optionally exports sandbox files (compresses multiple files into a zip archive if there are multiple files in the specified path, or exports a single file directly). Recommended for use cases that don't require continuous sandbox operations.", + "inputSchema": { + "type": "object", + "properties": { + "language": { + "type": "string", + "enum": [ + "python", + "r", + "java", + "bash", + "js" + ], + "description": "The programming language to execute the code. If not provided or if the value is not in the allowed options, it will be treated as Python code" + }, + "code": { + "type": "string", + "description": "The source code to be executed in the sandbox" + }, + "envs": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Environment variables to be set during code execution. Supports passing custom environment variables as key-value pairs" + }, + "is_download": { + "type": "boolean", + "description": "Flag to indicate whether to download generated files. Must be enabled if the code generates files that need to be retrieved" + }, + "timeout": { + "type": "number", + "description": "Maximum execution time in seconds for the sandbox. If code execution exceeds this time, it will be terminated and return a timeout error. Default is 5" + } + }, + "required": [ + "language", + "code" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "writeSandboxFiles", + "description": "Import files from public URLs or base64 data into a sandbox. Supports batch import of multiple files. If the target file already exists, it will be overwritten. If the target directory doesn't exist, it will be automatically created. You must create a sandbox before calling this tool.", + "inputSchema": { + "type": "object", + "properties": { + "sandbox_id": { + "type": "string", + "description": "The ID of the sandbox to write files to." + }, + "file_list": { + "type": "array", + "items": { + "type": "object", + "properties": { + "file": { + "type": "string", + "description": "Public URL of the source file or base64 data of file" + }, + "save_path": { + "type": "string", + "description": "Target path in the sandbox where the file will be saved (Linux path format) e.g. /home/user" + } + }, + "required": [ + "file", + "save_path" + ], + "additionalProperties": false + }, + "description": "List of files to import into the sandbox" + } + }, + "required": [ + "sandbox_id", + "file_list" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "runCommand", + "description": "Run a command line command on a specific linux sandbox. This returns text output only. For operations that generate files, you'll need to use separate file viewing and download endpoints.", + "inputSchema": { + "type": "object", + "properties": { + "cmd": { + "type": "string", + "description": "The command line command to run" + }, + "envs": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Environment variables to set when running the command" + }, + "timeout": { + "type": "integer", + "description": "The timeout for command execution in seconds. When installing dependencies or performing similar operations, it is recommended to set it to above 120 seconds.", + "default": 60 + }, + "sandbox_id": { + "type": "string", + "description": "The ID of the sandbox to run the command on" + } + }, + "required": [ + "cmd", + "sandbox_id" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "runCode", + "description": "Run code on a specific sandbox. This returns text output only. For operations that generate files, you'll need to use separate file viewing and export endpoints. Default file saving path is /home/user.", + "inputSchema": { + "type": "object", + "properties": { + "language": { + "type": "string", + "enum": [ + "python", + "r", + "java", + "bash", + "js" + ], + "description": "The programming language to use. If not specified or if the value is not in the allowed range, it will be treated as Python code.", + "default": "python" + }, + "code": { + "type": "string", + "description": "The code to run" + }, + "envs": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Environment variables to set when running the code" + }, + "timeout": { + "type": "integer", + "description": "The timeout for code execution in seconds", + "default": 5 + }, + "sandbox_id": { + "type": "string", + "description": "The ID of the sandbox to run the code on" + } + }, + "required": [ + "code", + "sandbox_id" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "listSandboxFiles", + "description": "List files and directories at specified paths within a sandbox. Supports batch queries with multiple paths. This operation can be used before downloadSandboxFiles to check if the file exists.", + "inputSchema": { + "type": "object", + "properties": { + "sandbox_id": { + "type": "string", + "description": "The ID of the sandbox to query files from" + }, + "path": {} + }, + "required": [ + "sandbox_id", + "path" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + } + ], + "prompts": [], + "resources": [], + "is_official": false, + "docker_url": "https://hub.docker.com/r/mcp/302_sandbox" +} diff --git a/mcp-registry/servers/shopify-dev.json b/mcp-registry/servers/shopify-dev.json new file mode 100644 index 00000000..edf74499 --- /dev/null +++ b/mcp-registry/servers/shopify-dev.json @@ -0,0 +1,143 @@ +{ + "display_name": "Shopify Dev MCP Server", + "license": "ISC", + "tags": [ + "shopify", + "mcp", + "model context protocol", + "graphql", + "admin api", + "documentation" + ], + "installations": { + "npm": { + "type": "npm", + "command": "npx", + "args": [ + "-y", + "@shopify/dev-mcp@latest" + ], + "description": "Configuration for Cursor or Claude Desktop" + }, + "docker":{ + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "mcp/shopify" + ] + } + }, + "examples": [ + { + "title": "", + "description": "", + "prompt": "How do I query products using the Shopify Admin GraphQL API?" + }, + { + "title": "", + "description": "", + "prompt": "Search the Shopify dev docs for information about webhooks" + }, + { + "title": "", + "description": "", + "prompt": "Help me write a GraphQL query to get all orders from the Shopify Admin API" + }, + { + "title": "", + "description": "", + "prompt": "What fields are available on the Product type in the Admin API?" + }, + { + "title": "", + "description": "", + "prompt": "Show me how to create a new product using the Admin GraphQL API" + } + ], + "name": "shopify-dev", + "repository": { + "type": "git", + "url": "https://github.com/Shopify/dev-mcp" + }, + "homepage": "https://github.com/Shopify/dev-mcp", + "author": { + "name": "Shopify" + }, + "description": "This project implements a Model Context Protocol (MCP) server that interacts with Shopify Dev. This protocol supports various tools to interact with different Shopify APIs.", + "categories": [ + "Dev Tools" + ], + "tools": [ + { + "name": "introspect_admin_schema", + "description": "This tool introspects and returns the portion of the Shopify Admin API GraphQL schema relevant to the user prompt. Only use this for the Shopify Admin API, and not any other APIs like the Shopify Storefront API or the Shopify Functions API.\n\n It takes two arguments: query and filter. The query argument is the string search term to filter schema elements by name. The filter argument is an array of strings to filter results to show specific sections.", + "inputSchema": { + "type": "object", + "properties": { + "query": { + "type": "string", + "description": "Search term to filter schema elements by name. Only pass simple terms like 'product', 'discountProduct', etc." + }, + "filter": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "all", + "types", + "queries", + "mutations" + ] + }, + "default": [ + "all" + ], + "description": "Filter results to show specific sections. Can include 'types', 'queries', 'mutations', or 'all' (default)" + } + }, + "required": [ + "query" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + }, + { + "name": "search_dev_docs", + "description": "This tool will take in the user prompt, search shopify.dev, and return relevant documentation that will help answer the user's question.\n\n It takes one argument: prompt, which is the search query for Shopify documentation.", + "inputSchema": { + "type": "object", + "properties": { + "prompt": { + "type": "string", + "description": "The search query for Shopify documentation" + } + }, + "required": [ + "prompt" + ], + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + } + } + ], + "prompts": [ + { + "name": "shopify_admin_graphql", + "description": "Query the Shopify Admin API", + "arguments": [ + { + "name": "query", + "description": "The specific Shopify Admin API question or request", + "required": true + } + ] + } + ], + "resources": [], + "is_official": false, + "docker_url": "https://hub.docker.com/r/mcp/shopify" +} diff --git a/mcp-registry/servers/stripe.json b/mcp-registry/servers/stripe.json index 692addb7..9ab00210 100644 --- a/mcp-registry/servers/stripe.json +++ b/mcp-registry/servers/stripe.json @@ -30,6 +30,22 @@ "--tools=all", "--api-key=${STRIPE_SECRET_KEY}" ] + }, + "docker": { + "type": "docker", + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "STRIPE_SECRET_KEY", + "mcp/stripe", + "--tools=all" + ], + "env": { + "STRIPE_SECRET_KEY": "${STRIPE_SECRET_KEY}" + } } }, "examples": [ @@ -343,5 +359,6 @@ } } ], - "is_official": true -} \ No newline at end of file + "is_official": true, + "docker_url": "https://hub.docker.com/r/mcp/stripe" +}