protogrid

Search / io.github.Role1776/mcp-x

X (Twitter)

L0· runs locally

Search, read and publish X posts and manage users, lists and media via the X API v2.

v0.1.1 · active · repository · website · descriptor JSON · versions

Runs on your machine: something must execute the package.Only local packages are published (npm, PyPI, OCI, …). The registry never executes them, so tools are unknown until you run it.
Quality–not scored
Trust90of 100
Packages7
Tools seen0

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "mcp-x": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "X_API_KEY",
        "-e",
        "X_API_KEY_SECRET",
        "-e",
        "X_ACCESS_TOKEN",
        "-e",
        "X_ACCESS_TOKEN_SECRET",
        "-e",
        "MEDIA_ROOT",
        "-e",
        "MCP_TRANSPORT",
        "-e",
        "MCP_NAME",
        "-e",
        "MCP_PATH",
        "-e",
        "SERVER_PORT",
        "-e",
        "SERVER_READ_TIMEOUT",
        "-e",
        "SERVER_WRITE_TIMEOUT",
        "-e",
        "LOG_MODE",
        "-e",
        "MAX_IDLE_CONNS_PER_HOST",
        "-e",
        "X_DEBUG",
        "-e",
        "POSTS_MAX_QUERIES",
        "-e",
        "POSTS_MAX_USERNAMES",
        "-e",
        "POSTS_MAX_IDS",
        "-e",
        "POSTS_DEFAULT_RESULTS",
        "-e",
        "POSTS_MAX_RESULTS",
        "-e",
        "POSTS_DEFAULT_DAYS",
        "-e",
        "POSTS_MAX_DAYS",
        "-e",
        "POSTS_DEFAULT_TIMEOUT_MS",
        "-e",
        "POSTS_MIN_TIMEOUT_MS",
        "-e",
        "POSTS_MAX_TIMEOUT_MS",
        "-e",
        "USERS_MAX_USERNAMES",
        "-e",
        "USERS_MAX_IDS",
        "-e",
        "USERS_DEFAULT_RESULTS",
        "-e",
        "USERS_MAX_RESULTS",
        "-e",
        "USERS_DEFAULT_TIMEOUT_MS",
        "-e",
        "USERS_MIN_TIMEOUT_MS",
        "-e",
        "USERS_MAX_TIMEOUT_MS",
        "-e",
        "LISTS_DEFAULT_RESULTS",
        "-e",
        "LISTS_MAX_RESULTS",
        "-e",
        "LISTS_DEFAULT_TIMEOUT_MS",
        "-e",
        "LISTS_MIN_TIMEOUT_MS",
        "-e",
        "LISTS_MAX_TIMEOUT_MS",
        "-e",
        "MEDIA_CHUNK_BYTES",
        "-e",
        "MEDIA_POLL_INTERVAL_MS",
        "-e",
        "MEDIA_DEFAULT_TIMEOUT_MS",
        "-e",
        "MEDIA_MIN_TIMEOUT_MS",
        "-e",
        "MEDIA_MAX_TIMEOUT_MS",
        "ghcr.io/role1776/mcp-x:0.1.1"
      ],
      "env": {
        "X_API_KEY": "${X_API_KEY}",
        "X_API_KEY_SECRET": "${X_API_KEY_SECRET}",
        "X_ACCESS_TOKEN": "${X_ACCESS_TOKEN}",
        "X_ACCESS_TOKEN_SECRET": "${X_ACCESS_TOKEN_SECRET}",
        "MEDIA_ROOT": "${MEDIA_ROOT}",
        "MCP_TRANSPORT": "stdio",
        "MCP_NAME": "mcp-x",
        "MCP_PATH": "/mcp",
        "SERVER_PORT": "8080",
        "SERVER_READ_TIMEOUT": "60s",
        "SERVER_WRITE_TIMEOUT": "60s",
        "LOG_MODE": "local",
        "MAX_IDLE_CONNS_PER_HOST": "100",
        "X_DEBUG": "false",
        "POSTS_MAX_QUERIES": "5",
        "POSTS_MAX_USERNAMES": "5",
        "POSTS_MAX_IDS": "100",
        "POSTS_DEFAULT_RESULTS": "10",
        "POSTS_MAX_RESULTS": "100",
        "POSTS_DEFAULT_DAYS": "7",
        "POSTS_MAX_DAYS": "7",
        "POSTS_DEFAULT_TIMEOUT_MS": "15000",
        "POSTS_MIN_TIMEOUT_MS": "2000",
        "POSTS_MAX_TIMEOUT_MS": "60000",
        "USERS_MAX_USERNAMES": "100",
        "USERS_MAX_IDS": "100",
        "USERS_DEFAULT_RESULTS": "100",
        "USERS_MAX_RESULTS": "1000",
        "USERS_DEFAULT_TIMEOUT_MS": "15000",
        "USERS_MIN_TIMEOUT_MS": "2000",
        "USERS_MAX_TIMEOUT_MS": "60000",
        "LISTS_DEFAULT_RESULTS": "25",
        "LISTS_MAX_RESULTS": "100",
        "LISTS_DEFAULT_TIMEOUT_MS": "15000",
        "LISTS_MIN_TIMEOUT_MS": "2000",
        "LISTS_MAX_TIMEOUT_MS": "60000",
        "MEDIA_CHUNK_BYTES": "4194304",
        "MEDIA_POLL_INTERVAL_MS": "2000",
        "MEDIA_DEFAULT_TIMEOUT_MS": "120000",
        "MEDIA_MIN_TIMEOUT_MS": "5000",
        "MEDIA_MAX_TIMEOUT_MS": "600000"
      }
    }
  }
}
claude mcp add mcp-x -e "X_API_KEY=${X_API_KEY}" -e "X_API_KEY_SECRET=${X_API_KEY_SECRET}" -e "X_ACCESS_TOKEN=${X_ACCESS_TOKEN}" -e "X_ACCESS_TOKEN_SECRET=${X_ACCESS_TOKEN_SECRET}" -e "MEDIA_ROOT=${MEDIA_ROOT}" -e "MCP_TRANSPORT=stdio" -e "MCP_NAME=mcp-x" -e "MCP_PATH=/mcp" -e "SERVER_PORT=8080" -e "SERVER_READ_TIMEOUT=60s" -e "SERVER_WRITE_TIMEOUT=60s" -e "LOG_MODE=local" -e "MAX_IDLE_CONNS_PER_HOST=100" -e "X_DEBUG=false" -e "POSTS_MAX_QUERIES=5" -e "POSTS_MAX_USERNAMES=5" -e "POSTS_MAX_IDS=100" -e "POSTS_DEFAULT_RESULTS=10" -e "POSTS_MAX_RESULTS=100" -e "POSTS_DEFAULT_DAYS=7" -e "POSTS_MAX_DAYS=7" -e "POSTS_DEFAULT_TIMEOUT_MS=15000" -e "POSTS_MIN_TIMEOUT_MS=2000" -e "POSTS_MAX_TIMEOUT_MS=60000" -e "USERS_MAX_USERNAMES=100" -e "USERS_MAX_IDS=100" -e "USERS_DEFAULT_RESULTS=100" -e "USERS_MAX_RESULTS=1000" -e "USERS_DEFAULT_TIMEOUT_MS=15000" -e "USERS_MIN_TIMEOUT_MS=2000" -e "USERS_MAX_TIMEOUT_MS=60000" -e "LISTS_DEFAULT_RESULTS=25" -e "LISTS_MAX_RESULTS=100" -e "LISTS_DEFAULT_TIMEOUT_MS=15000" -e "LISTS_MIN_TIMEOUT_MS=2000" -e "LISTS_MAX_TIMEOUT_MS=60000" -e "MEDIA_CHUNK_BYTES=4194304" -e "MEDIA_POLL_INTERVAL_MS=2000" -e "MEDIA_DEFAULT_TIMEOUT_MS=120000" -e "MEDIA_MIN_TIMEOUT_MS=5000" -e "MEDIA_MAX_TIMEOUT_MS=600000" -- docker run -i --rm -e X_API_KEY -e X_API_KEY_SECRET -e X_ACCESS_TOKEN -e X_ACCESS_TOKEN_SECRET -e MEDIA_ROOT -e MCP_TRANSPORT -e MCP_NAME -e MCP_PATH -e SERVER_PORT -e SERVER_READ_TIMEOUT -e SERVER_WRITE_TIMEOUT -e LOG_MODE -e MAX_IDLE_CONNS_PER_HOST -e X_DEBUG -e POSTS_MAX_QUERIES -e POSTS_MAX_USERNAMES -e POSTS_MAX_IDS -e POSTS_DEFAULT_RESULTS -e POSTS_MAX_RESULTS -e POSTS_DEFAULT_DAYS -e POSTS_MAX_DAYS -e POSTS_DEFAULT_TIMEOUT_MS -e POSTS_MIN_TIMEOUT_MS -e POSTS_MAX_TIMEOUT_MS -e USERS_MAX_USERNAMES -e USERS_MAX_IDS -e USERS_DEFAULT_RESULTS -e USERS_MAX_RESULTS -e USERS_DEFAULT_TIMEOUT_MS -e USERS_MIN_TIMEOUT_MS -e USERS_MAX_TIMEOUT_MS -e LISTS_DEFAULT_RESULTS -e LISTS_MAX_RESULTS -e LISTS_DEFAULT_TIMEOUT_MS -e LISTS_MIN_TIMEOUT_MS -e LISTS_MAX_TIMEOUT_MS -e MEDIA_CHUNK_BYTES -e MEDIA_POLL_INTERVAL_MS -e MEDIA_DEFAULT_TIMEOUT_MS -e MEDIA_MIN_TIMEOUT_MS -e MEDIA_MAX_TIMEOUT_MS ghcr.io/role1776/mcp-x:0.1.1
[mcp_servers.mcp-x]
command = "docker"
args = ["run", "-i", "--rm", "-e", "X_API_KEY", "-e", "X_API_KEY_SECRET", "-e", "X_ACCESS_TOKEN", "-e", "X_ACCESS_TOKEN_SECRET", "-e", "MEDIA_ROOT", "-e", "MCP_TRANSPORT", "-e", "MCP_NAME", "-e", "MCP_PATH", "-e", "SERVER_PORT", "-e", "SERVER_READ_TIMEOUT", "-e", "SERVER_WRITE_TIMEOUT", "-e", "LOG_MODE", "-e", "MAX_IDLE_CONNS_PER_HOST", "-e", "X_DEBUG", "-e", "POSTS_MAX_QUERIES", "-e", "POSTS_MAX_USERNAMES", "-e", "POSTS_MAX_IDS", "-e", "POSTS_DEFAULT_RESULTS", "-e", "POSTS_MAX_RESULTS", "-e", "POSTS_DEFAULT_DAYS", "-e", "POSTS_MAX_DAYS", "-e", "POSTS_DEFAULT_TIMEOUT_MS", "-e", "POSTS_MIN_TIMEOUT_MS", "-e", "POSTS_MAX_TIMEOUT_MS", "-e", "USERS_MAX_USERNAMES", "-e", "USERS_MAX_IDS", "-e", "USERS_DEFAULT_RESULTS", "-e", "USERS_MAX_RESULTS", "-e", "USERS_DEFAULT_TIMEOUT_MS", "-e", "USERS_MIN_TIMEOUT_MS", "-e", "USERS_MAX_TIMEOUT_MS", "-e", "LISTS_DEFAULT_RESULTS", "-e", "LISTS_MAX_RESULTS", "-e", "LISTS_DEFAULT_TIMEOUT_MS", "-e", "LISTS_MIN_TIMEOUT_MS", "-e", "LISTS_MAX_TIMEOUT_MS", "-e", "MEDIA_CHUNK_BYTES", "-e", "MEDIA_POLL_INTERVAL_MS", "-e", "MEDIA_DEFAULT_TIMEOUT_MS", "-e", "MEDIA_MIN_TIMEOUT_MS", "-e", "MEDIA_MAX_TIMEOUT_MS", "ghcr.io/role1776/mcp-x:0.1.1"]
env = { "X_API_KEY" = "${X_API_KEY}", "X_API_KEY_SECRET" = "${X_API_KEY_SECRET}", "X_ACCESS_TOKEN" = "${X_ACCESS_TOKEN}", "X_ACCESS_TOKEN_SECRET" = "${X_ACCESS_TOKEN_SECRET}", "MEDIA_ROOT" = "${MEDIA_ROOT}", "MCP_TRANSPORT" = "stdio", "MCP_NAME" = "mcp-x", "MCP_PATH" = "/mcp", "SERVER_PORT" = "8080", "SERVER_READ_TIMEOUT" = "60s", "SERVER_WRITE_TIMEOUT" = "60s", "LOG_MODE" = "local", "MAX_IDLE_CONNS_PER_HOST" = "100", "X_DEBUG" = "false", "POSTS_MAX_QUERIES" = "5", "POSTS_MAX_USERNAMES" = "5", "POSTS_MAX_IDS" = "100", "POSTS_DEFAULT_RESULTS" = "10", "POSTS_MAX_RESULTS" = "100", "POSTS_DEFAULT_DAYS" = "7", "POSTS_MAX_DAYS" = "7", "POSTS_DEFAULT_TIMEOUT_MS" = "15000", "POSTS_MIN_TIMEOUT_MS" = "2000", "POSTS_MAX_TIMEOUT_MS" = "60000", "USERS_MAX_USERNAMES" = "100", "USERS_MAX_IDS" = "100", "USERS_DEFAULT_RESULTS" = "100", "USERS_MAX_RESULTS" = "1000", "USERS_DEFAULT_TIMEOUT_MS" = "15000", "USERS_MIN_TIMEOUT_MS" = "2000", "USERS_MAX_TIMEOUT_MS" = "60000", "LISTS_DEFAULT_RESULTS" = "25", "LISTS_MAX_RESULTS" = "100", "LISTS_DEFAULT_TIMEOUT_MS" = "15000", "LISTS_MIN_TIMEOUT_MS" = "2000", "LISTS_MAX_TIMEOUT_MS" = "60000", "MEDIA_CHUNK_BYTES" = "4194304", "MEDIA_POLL_INTERVAL_MS" = "2000", "MEDIA_DEFAULT_TIMEOUT_MS" = "120000", "MEDIA_MIN_TIMEOUT_MS" = "5000", "MEDIA_MAX_TIMEOUT_MS" = "600000" }
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mcp-x": {
      "type": "local",
      "command": [
        "docker",
        "run",
        "-i",
        "--rm",
        "-e",
        "X_API_KEY",
        "-e",
        "X_API_KEY_SECRET",
        "-e",
        "X_ACCESS_TOKEN",
        "-e",
        "X_ACCESS_TOKEN_SECRET",
        "-e",
        "MEDIA_ROOT",
        "-e",
        "MCP_TRANSPORT",
        "-e",
        "MCP_NAME",
        "-e",
        "MCP_PATH",
        "-e",
        "SERVER_PORT",
        "-e",
        "SERVER_READ_TIMEOUT",
        "-e",
        "SERVER_WRITE_TIMEOUT",
        "-e",
        "LOG_MODE",
        "-e",
        "MAX_IDLE_CONNS_PER_HOST",
        "-e",
        "X_DEBUG",
        "-e",
        "POSTS_MAX_QUERIES",
        "-e",
        "POSTS_MAX_USERNAMES",
        "-e",
        "POSTS_MAX_IDS",
        "-e",
        "POSTS_DEFAULT_RESULTS",
        "-e",
        "POSTS_MAX_RESULTS",
        "-e",
        "POSTS_DEFAULT_DAYS",
        "-e",
        "POSTS_MAX_DAYS",
        "-e",
        "POSTS_DEFAULT_TIMEOUT_MS",
        "-e",
        "POSTS_MIN_TIMEOUT_MS",
        "-e",
        "POSTS_MAX_TIMEOUT_MS",
        "-e",
        "USERS_MAX_USERNAMES",
        "-e",
        "USERS_MAX_IDS",
        "-e",
        "USERS_DEFAULT_RESULTS",
        "-e",
        "USERS_MAX_RESULTS",
        "-e",
        "USERS_DEFAULT_TIMEOUT_MS",
        "-e",
        "USERS_MIN_TIMEOUT_MS",
        "-e",
        "USERS_MAX_TIMEOUT_MS",
        "-e",
        "LISTS_DEFAULT_RESULTS",
        "-e",
        "LISTS_MAX_RESULTS",
        "-e",
        "LISTS_DEFAULT_TIMEOUT_MS",
        "-e",
        "LISTS_MIN_TIMEOUT_MS",
        "-e",
        "LISTS_MAX_TIMEOUT_MS",
        "-e",
        "MEDIA_CHUNK_BYTES",
        "-e",
        "MEDIA_POLL_INTERVAL_MS",
        "-e",
        "MEDIA_DEFAULT_TIMEOUT_MS",
        "-e",
        "MEDIA_MIN_TIMEOUT_MS",
        "-e",
        "MEDIA_MAX_TIMEOUT_MS",
        "ghcr.io/role1776/mcp-x:0.1.1"
      ],
      "enabled": true,
      "environment": {
        "X_API_KEY": "{env:X_API_KEY}",
        "X_API_KEY_SECRET": "{env:X_API_KEY_SECRET}",
        "X_ACCESS_TOKEN": "{env:X_ACCESS_TOKEN}",
        "X_ACCESS_TOKEN_SECRET": "{env:X_ACCESS_TOKEN_SECRET}",
        "MEDIA_ROOT": "{env:MEDIA_ROOT}",
        "MCP_TRANSPORT": "stdio",
        "MCP_NAME": "mcp-x",
        "MCP_PATH": "/mcp",
        "SERVER_PORT": "8080",
        "SERVER_READ_TIMEOUT": "60s",
        "SERVER_WRITE_TIMEOUT": "60s",
        "LOG_MODE": "local",
        "MAX_IDLE_CONNS_PER_HOST": "100",
        "X_DEBUG": "false",
        "POSTS_MAX_QUERIES": "5",
        "POSTS_MAX_USERNAMES": "5",
        "POSTS_MAX_IDS": "100",
        "POSTS_DEFAULT_RESULTS": "10",
        "POSTS_MAX_RESULTS": "100",
        "POSTS_DEFAULT_DAYS": "7",
        "POSTS_MAX_DAYS": "7",
        "POSTS_DEFAULT_TIMEOUT_MS": "15000",
        "POSTS_MIN_TIMEOUT_MS": "2000",
        "POSTS_MAX_TIMEOUT_MS": "60000",
        "USERS_MAX_USERNAMES": "100",
        "USERS_MAX_IDS": "100",
        "USERS_DEFAULT_RESULTS": "100",
        "USERS_MAX_RESULTS": "1000",
        "USERS_DEFAULT_TIMEOUT_MS": "15000",
        "USERS_MIN_TIMEOUT_MS": "2000",
        "USERS_MAX_TIMEOUT_MS": "60000",
        "LISTS_DEFAULT_RESULTS": "25",
        "LISTS_MAX_RESULTS": "100",
        "LISTS_DEFAULT_TIMEOUT_MS": "15000",
        "LISTS_MIN_TIMEOUT_MS": "2000",
        "LISTS_MAX_TIMEOUT_MS": "60000",
        "MEDIA_CHUNK_BYTES": "4194304",
        "MEDIA_POLL_INTERVAL_MS": "2000",
        "MEDIA_DEFAULT_TIMEOUT_MS": "120000",
        "MEDIA_MIN_TIMEOUT_MS": "5000",
        "MEDIA_MAX_TIMEOUT_MS": "600000"
      }
    }
  }
}
{
  "mcpServers": {
    "mcp-x": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "X_API_KEY",
        "-e",
        "X_API_KEY_SECRET",
        "-e",
        "X_ACCESS_TOKEN",
        "-e",
        "X_ACCESS_TOKEN_SECRET",
        "-e",
        "MEDIA_ROOT",
        "-e",
        "MCP_TRANSPORT",
        "-e",
        "MCP_NAME",
        "-e",
        "MCP_PATH",
        "-e",
        "SERVER_PORT",
        "-e",
        "SERVER_READ_TIMEOUT",
        "-e",
        "SERVER_WRITE_TIMEOUT",
        "-e",
        "LOG_MODE",
        "-e",
        "MAX_IDLE_CONNS_PER_HOST",
        "-e",
        "X_DEBUG",
        "-e",
        "POSTS_MAX_QUERIES",
        "-e",
        "POSTS_MAX_USERNAMES",
        "-e",
        "POSTS_MAX_IDS",
        "-e",
        "POSTS_DEFAULT_RESULTS",
        "-e",
        "POSTS_MAX_RESULTS",
        "-e",
        "POSTS_DEFAULT_DAYS",
        "-e",
        "POSTS_MAX_DAYS",
        "-e",
        "POSTS_DEFAULT_TIMEOUT_MS",
        "-e",
        "POSTS_MIN_TIMEOUT_MS",
        "-e",
        "POSTS_MAX_TIMEOUT_MS",
        "-e",
        "USERS_MAX_USERNAMES",
        "-e",
        "USERS_MAX_IDS",
        "-e",
        "USERS_DEFAULT_RESULTS",
        "-e",
        "USERS_MAX_RESULTS",
        "-e",
        "USERS_DEFAULT_TIMEOUT_MS",
        "-e",
        "USERS_MIN_TIMEOUT_MS",
        "-e",
        "USERS_MAX_TIMEOUT_MS",
        "-e",
        "LISTS_DEFAULT_RESULTS",
        "-e",
        "LISTS_MAX_RESULTS",
        "-e",
        "LISTS_DEFAULT_TIMEOUT_MS",
        "-e",
        "LISTS_MIN_TIMEOUT_MS",
        "-e",
        "LISTS_MAX_TIMEOUT_MS",
        "-e",
        "MEDIA_CHUNK_BYTES",
        "-e",
        "MEDIA_POLL_INTERVAL_MS",
        "-e",
        "MEDIA_DEFAULT_TIMEOUT_MS",
        "-e",
        "MEDIA_MIN_TIMEOUT_MS",
        "-e",
        "MEDIA_MAX_TIMEOUT_MS",
        "ghcr.io/role1776/mcp-x:0.1.1"
      ],
      "env": {
        "X_API_KEY": "${X_API_KEY}",
        "X_API_KEY_SECRET": "${X_API_KEY_SECRET}",
        "X_ACCESS_TOKEN": "${X_ACCESS_TOKEN}",
        "X_ACCESS_TOKEN_SECRET": "${X_ACCESS_TOKEN_SECRET}",
        "MEDIA_ROOT": "${MEDIA_ROOT}",
        "MCP_TRANSPORT": "stdio",
        "MCP_NAME": "mcp-x",
        "MCP_PATH": "/mcp",
        "SERVER_PORT": "8080",
        "SERVER_READ_TIMEOUT": "60s",
        "SERVER_WRITE_TIMEOUT": "60s",
        "LOG_MODE": "local",
        "MAX_IDLE_CONNS_PER_HOST": "100",
        "X_DEBUG": "false",
        "POSTS_MAX_QUERIES": "5",
        "POSTS_MAX_USERNAMES": "5",
        "POSTS_MAX_IDS": "100",
        "POSTS_DEFAULT_RESULTS": "10",
        "POSTS_MAX_RESULTS": "100",
        "POSTS_DEFAULT_DAYS": "7",
        "POSTS_MAX_DAYS": "7",
        "POSTS_DEFAULT_TIMEOUT_MS": "15000",
        "POSTS_MIN_TIMEOUT_MS": "2000",
        "POSTS_MAX_TIMEOUT_MS": "60000",
        "USERS_MAX_USERNAMES": "100",
        "USERS_MAX_IDS": "100",
        "USERS_DEFAULT_RESULTS": "100",
        "USERS_MAX_RESULTS": "1000",
        "USERS_DEFAULT_TIMEOUT_MS": "15000",
        "USERS_MIN_TIMEOUT_MS": "2000",
        "USERS_MAX_TIMEOUT_MS": "60000",
        "LISTS_DEFAULT_RESULTS": "25",
        "LISTS_MAX_RESULTS": "100",
        "LISTS_DEFAULT_TIMEOUT_MS": "15000",
        "LISTS_MIN_TIMEOUT_MS": "2000",
        "LISTS_MAX_TIMEOUT_MS": "60000",
        "MEDIA_CHUNK_BYTES": "4194304",
        "MEDIA_POLL_INTERVAL_MS": "2000",
        "MEDIA_DEFAULT_TIMEOUT_MS": "120000",
        "MEDIA_MIN_TIMEOUT_MS": "5000",
        "MEDIA_MAX_TIMEOUT_MS": "600000"
      }
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=mcp-x&config=eyJjb21tYW5kIjoiZG9ja2VyIiwiYXJncyI6WyJydW4iLCItaSIsIi0tcm0iLCItZSIsIlhfQVBJX0tFWSIsIi1lIiwiWF9BUElfS0VZX1NFQ1JFVCIsIi1lIiwiWF9BQ0NFU1NfVE9LRU4iLCItZSIsIlhfQUNDRVNTX1RPS0VOX1NFQ1JFVCIsIi1lIiwiTUVESUFfUk9PVCIsIi1lIiwiTUNQX1RSQU5TUE9SVCIsIi1lIiwiTUNQX05BTUUiLCItZSIsIk1DUF9QQVRIIiwiLWUiLCJTRVJWRVJfUE9SVCIsIi1lIiwiU0VSVkVSX1JFQURfVElNRU9VVCIsIi1lIiwiU0VSVkVSX1dSSVRFX1RJTUVPVVQiLCItZSIsIkxPR19NT0RFIiwiLWUiLCJNQVhfSURMRV9DT05OU19QRVJfSE9TVCIsIi1lIiwiWF9ERUJVRyIsIi1lIiwiUE9TVFNfTUFYX1FVRVJJRVMiLCItZSIsIlBPU1RTX01BWF9VU0VSTkFNRVMiLCItZSIsIlBPU1RTX01BWF9JRFMiLCItZSIsIlBPU1RTX0RFRkFVTFRfUkVTVUxUUyIsIi1lIiwiUE9TVFNfTUFYX1JFU1VMVFMiLCItZSIsIlBPU1RTX0RFRkFVTFRfREFZUyIsIi1lIiwiUE9TVFNfTUFYX0RBWVMiLCItZSIsIlBPU1RTX0RFRkFVTFRfVElNRU9VVF9NUyIsIi1lIiwiUE9TVFNfTUlOX1RJTUVPVVRfTVMiLCItZSIsIlBPU1RTX01BWF9USU1FT1VUX01TIiwiLWUiLCJVU0VSU19NQVhfVVNFUk5BTUVTIiwiLWUiLCJVU0VSU19NQVhfSURTIiwiLWUiLCJVU0VSU19ERUZBVUxUX1JFU1VMVFMiLCItZSIsIlVTRVJTX01BWF9SRVNVTFRTIiwiLWUiLCJVU0VSU19ERUZBVUxUX1RJTUVPVVRfTVMiLCItZSIsIlVTRVJTX01JTl9USU1FT1VUX01TIiwiLWUiLCJVU0VSU19NQVhfVElNRU9VVF9NUyIsIi1lIiwiTElTVFNfREVGQVVMVF9SRVNVTFRTIiwiLWUiLCJMSVNUU19NQVhfUkVTVUxUUyIsIi1lIiwiTElTVFNfREVGQVVMVF9USU1FT1VUX01TIiwiLWUiLCJMSVNUU19NSU5fVElNRU9VVF9NUyIsIi1lIiwiTElTVFNfTUFYX1RJTUVPVVRfTVMiLCItZSIsIk1FRElBX0NIVU5LX0JZVEVTIiwiLWUiLCJNRURJQV9QT0xMX0lOVEVSVkFMX01TIiwiLWUiLCJNRURJQV9ERUZBVUxUX1RJTUVPVVRfTVMiLCItZSIsIk1FRElBX01JTl9USU1FT1VUX01TIiwiLWUiLCJNRURJQV9NQVhfVElNRU9VVF9NUyIsImdoY3IuaW8vcm9sZTE3NzYvbWNwLXg6MC4xLjEiXSwiZW52Ijp7IlhfQVBJX0tFWSI6IiR7WF9BUElfS0VZfSIsIlhfQVBJX0tFWV9TRUNSRVQiOiIke1hfQVBJX0tFWV9TRUNSRVR9IiwiWF9BQ0NFU1NfVE9LRU4iOiIke1hfQUNDRVNTX1RPS0VOfSIsIlhfQUNDRVNTX1RPS0VOX1NFQ1JFVCI6IiR7WF9BQ0NFU1NfVE9LRU5fU0VDUkVUfSIsIk1FRElBX1JPT1QiOiIke01FRElBX1JPT1R9IiwiTUNQX1RSQU5TUE9SVCI6InN0ZGlvIiwiTUNQX05BTUUiOiJtY3AteCIsIk1DUF9QQVRIIjoiL21jcCIsIlNFUlZFUl9QT1JUIjoiODA4MCIsIlNFUlZFUl9SRUFEX1RJTUVPVVQiOiI2MHMiLCJTRVJWRVJfV1JJVEVfVElNRU9VVCI6IjYwcyIsIkxPR19NT0RFIjoibG9jYWwiLCJNQVhfSURMRV9DT05OU19QRVJfSE9TVCI6IjEwMCIsIlhfREVCVUciOiJmYWxzZSIsIlBPU1RTX01BWF9RVUVSSUVTIjoiNSIsIlBPU1RTX01BWF9VU0VSTkFNRVMiOiI1IiwiUE9TVFNfTUFYX0lEUyI6IjEwMCIsIlBPU1RTX0RFRkFVTFRfUkVTVUxUUyI6IjEwIiwiUE9TVFNfTUFYX1JFU1VMVFMiOiIxMDAiLCJQT1NUU19ERUZBVUxUX0RBWVMiOiI3IiwiUE9TVFNfTUFYX0RBWVMiOiI3IiwiUE9TVFNfREVGQVVMVF9USU1FT1VUX01TIjoiMTUwMDAiLCJQT1NUU19NSU5fVElNRU9VVF9NUyI6IjIwMDAiLCJQT1NUU19NQVhfVElNRU9VVF9NUyI6IjYwMDAwIiwiVVNFUlNfTUFYX1VTRVJOQU1FUyI6IjEwMCIsIlVTRVJTX01BWF9JRFMiOiIxMDAiLCJVU0VSU19ERUZBVUxUX1JFU1VMVFMiOiIxMDAiLCJVU0VSU19NQVhfUkVTVUxUUyI6IjEwMDAiLCJVU0VSU19ERUZBVUxUX1RJTUVPVVRfTVMiOiIxNTAwMCIsIlVTRVJTX01JTl9USU1FT1VUX01TIjoiMjAwMCIsIlVTRVJTX01BWF9USU1FT1VUX01TIjoiNjAwMDAiLCJMSVNUU19ERUZBVUxUX1JFU1VMVFMiOiIyNSIsIkxJU1RTX01BWF9SRVNVTFRTIjoiMTAwIiwiTElTVFNfREVGQVVMVF9USU1FT1VUX01TIjoiMTUwMDAiLCJMSVNUU19NSU5fVElNRU9VVF9NUyI6IjIwMDAiLCJMSVNUU19NQVhfVElNRU9VVF9NUyI6IjYwMDAwIiwiTUVESUFfQ0hVTktfQllURVMiOiI0MTk0MzA0IiwiTUVESUFfUE9MTF9JTlRFUlZBTF9NUyI6IjIwMDAiLCJNRURJQV9ERUZBVUxUX1RJTUVPVVRfTVMiOiIxMjAwMDAiLCJNRURJQV9NSU5fVElNRU9VVF9NUyI6IjUwMDAiLCJNRURJQV9NQVhfVElNRU9VVF9NUyI6IjYwMDAwMCJ9fQ%3D%3D"
}
{
  "servers": {
    "mcp-x": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "X_API_KEY",
        "-e",
        "X_API_KEY_SECRET",
        "-e",
        "X_ACCESS_TOKEN",
        "-e",
        "X_ACCESS_TOKEN_SECRET",
        "-e",
        "MEDIA_ROOT",
        "-e",
        "MCP_TRANSPORT",
        "-e",
        "MCP_NAME",
        "-e",
        "MCP_PATH",
        "-e",
        "SERVER_PORT",
        "-e",
        "SERVER_READ_TIMEOUT",
        "-e",
        "SERVER_WRITE_TIMEOUT",
        "-e",
        "LOG_MODE",
        "-e",
        "MAX_IDLE_CONNS_PER_HOST",
        "-e",
        "X_DEBUG",
        "-e",
        "POSTS_MAX_QUERIES",
        "-e",
        "POSTS_MAX_USERNAMES",
        "-e",
        "POSTS_MAX_IDS",
        "-e",
        "POSTS_DEFAULT_RESULTS",
        "-e",
        "POSTS_MAX_RESULTS",
        "-e",
        "POSTS_DEFAULT_DAYS",
        "-e",
        "POSTS_MAX_DAYS",
        "-e",
        "POSTS_DEFAULT_TIMEOUT_MS",
        "-e",
        "POSTS_MIN_TIMEOUT_MS",
        "-e",
        "POSTS_MAX_TIMEOUT_MS",
        "-e",
        "USERS_MAX_USERNAMES",
        "-e",
        "USERS_MAX_IDS",
        "-e",
        "USERS_DEFAULT_RESULTS",
        "-e",
        "USERS_MAX_RESULTS",
        "-e",
        "USERS_DEFAULT_TIMEOUT_MS",
        "-e",
        "USERS_MIN_TIMEOUT_MS",
        "-e",
        "USERS_MAX_TIMEOUT_MS",
        "-e",
        "LISTS_DEFAULT_RESULTS",
        "-e",
        "LISTS_MAX_RESULTS",
        "-e",
        "LISTS_DEFAULT_TIMEOUT_MS",
        "-e",
        "LISTS_MIN_TIMEOUT_MS",
        "-e",
        "LISTS_MAX_TIMEOUT_MS",
        "-e",
        "MEDIA_CHUNK_BYTES",
        "-e",
        "MEDIA_POLL_INTERVAL_MS",
        "-e",
        "MEDIA_DEFAULT_TIMEOUT_MS",
        "-e",
        "MEDIA_MIN_TIMEOUT_MS",
        "-e",
        "MEDIA_MAX_TIMEOUT_MS",
        "ghcr.io/role1776/mcp-x:0.1.1"
      ],
      "env": {
        "X_API_KEY": "${X_API_KEY}",
        "X_API_KEY_SECRET": "${X_API_KEY_SECRET}",
        "X_ACCESS_TOKEN": "${X_ACCESS_TOKEN}",
        "X_ACCESS_TOKEN_SECRET": "${X_ACCESS_TOKEN_SECRET}",
        "MEDIA_ROOT": "${MEDIA_ROOT}",
        "MCP_TRANSPORT": "stdio",
        "MCP_NAME": "mcp-x",
        "MCP_PATH": "/mcp",
        "SERVER_PORT": "8080",
        "SERVER_READ_TIMEOUT": "60s",
        "SERVER_WRITE_TIMEOUT": "60s",
        "LOG_MODE": "local",
        "MAX_IDLE_CONNS_PER_HOST": "100",
        "X_DEBUG": "false",
        "POSTS_MAX_QUERIES": "5",
        "POSTS_MAX_USERNAMES": "5",
        "POSTS_MAX_IDS": "100",
        "POSTS_DEFAULT_RESULTS": "10",
        "POSTS_MAX_RESULTS": "100",
        "POSTS_DEFAULT_DAYS": "7",
        "POSTS_MAX_DAYS": "7",
        "POSTS_DEFAULT_TIMEOUT_MS": "15000",
        "POSTS_MIN_TIMEOUT_MS": "2000",
        "POSTS_MAX_TIMEOUT_MS": "60000",
        "USERS_MAX_USERNAMES": "100",
        "USERS_MAX_IDS": "100",
        "USERS_DEFAULT_RESULTS": "100",
        "USERS_MAX_RESULTS": "1000",
        "USERS_DEFAULT_TIMEOUT_MS": "15000",
        "USERS_MIN_TIMEOUT_MS": "2000",
        "USERS_MAX_TIMEOUT_MS": "60000",
        "LISTS_DEFAULT_RESULTS": "25",
        "LISTS_MAX_RESULTS": "100",
        "LISTS_DEFAULT_TIMEOUT_MS": "15000",
        "LISTS_MIN_TIMEOUT_MS": "2000",
        "LISTS_MAX_TIMEOUT_MS": "60000",
        "MEDIA_CHUNK_BYTES": "4194304",
        "MEDIA_POLL_INTERVAL_MS": "2000",
        "MEDIA_DEFAULT_TIMEOUT_MS": "120000",
        "MEDIA_MIN_TIMEOUT_MS": "5000",
        "MEDIA_MAX_TIMEOUT_MS": "600000"
      }
    }
  }
}
{
  "mcpServers": {
    "mcp-x": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "X_API_KEY",
        "-e",
        "X_API_KEY_SECRET",
        "-e",
        "X_ACCESS_TOKEN",
        "-e",
        "X_ACCESS_TOKEN_SECRET",
        "-e",
        "MEDIA_ROOT",
        "-e",
        "MCP_TRANSPORT",
        "-e",
        "MCP_NAME",
        "-e",
        "MCP_PATH",
        "-e",
        "SERVER_PORT",
        "-e",
        "SERVER_READ_TIMEOUT",
        "-e",
        "SERVER_WRITE_TIMEOUT",
        "-e",
        "LOG_MODE",
        "-e",
        "MAX_IDLE_CONNS_PER_HOST",
        "-e",
        "X_DEBUG",
        "-e",
        "POSTS_MAX_QUERIES",
        "-e",
        "POSTS_MAX_USERNAMES",
        "-e",
        "POSTS_MAX_IDS",
        "-e",
        "POSTS_DEFAULT_RESULTS",
        "-e",
        "POSTS_MAX_RESULTS",
        "-e",
        "POSTS_DEFAULT_DAYS",
        "-e",
        "POSTS_MAX_DAYS",
        "-e",
        "POSTS_DEFAULT_TIMEOUT_MS",
        "-e",
        "POSTS_MIN_TIMEOUT_MS",
        "-e",
        "POSTS_MAX_TIMEOUT_MS",
        "-e",
        "USERS_MAX_USERNAMES",
        "-e",
        "USERS_MAX_IDS",
        "-e",
        "USERS_DEFAULT_RESULTS",
        "-e",
        "USERS_MAX_RESULTS",
        "-e",
        "USERS_DEFAULT_TIMEOUT_MS",
        "-e",
        "USERS_MIN_TIMEOUT_MS",
        "-e",
        "USERS_MAX_TIMEOUT_MS",
        "-e",
        "LISTS_DEFAULT_RESULTS",
        "-e",
        "LISTS_MAX_RESULTS",
        "-e",
        "LISTS_DEFAULT_TIMEOUT_MS",
        "-e",
        "LISTS_MIN_TIMEOUT_MS",
        "-e",
        "LISTS_MAX_TIMEOUT_MS",
        "-e",
        "MEDIA_CHUNK_BYTES",
        "-e",
        "MEDIA_POLL_INTERVAL_MS",
        "-e",
        "MEDIA_DEFAULT_TIMEOUT_MS",
        "-e",
        "MEDIA_MIN_TIMEOUT_MS",
        "-e",
        "MEDIA_MAX_TIMEOUT_MS",
        "ghcr.io/role1776/mcp-x:0.1.1"
      ],
      "env": {
        "X_API_KEY": "${X_API_KEY}",
        "X_API_KEY_SECRET": "${X_API_KEY_SECRET}",
        "X_ACCESS_TOKEN": "${X_ACCESS_TOKEN}",
        "X_ACCESS_TOKEN_SECRET": "${X_ACCESS_TOKEN_SECRET}",
        "MEDIA_ROOT": "${MEDIA_ROOT}",
        "MCP_TRANSPORT": "stdio",
        "MCP_NAME": "mcp-x",
        "MCP_PATH": "/mcp",
        "SERVER_PORT": "8080",
        "SERVER_READ_TIMEOUT": "60s",
        "SERVER_WRITE_TIMEOUT": "60s",
        "LOG_MODE": "local",
        "MAX_IDLE_CONNS_PER_HOST": "100",
        "X_DEBUG": "false",
        "POSTS_MAX_QUERIES": "5",
        "POSTS_MAX_USERNAMES": "5",
        "POSTS_MAX_IDS": "100",
        "POSTS_DEFAULT_RESULTS": "10",
        "POSTS_MAX_RESULTS": "100",
        "POSTS_DEFAULT_DAYS": "7",
        "POSTS_MAX_DAYS": "7",
        "POSTS_DEFAULT_TIMEOUT_MS": "15000",
        "POSTS_MIN_TIMEOUT_MS": "2000",
        "POSTS_MAX_TIMEOUT_MS": "60000",
        "USERS_MAX_USERNAMES": "100",
        "USERS_MAX_IDS": "100",
        "USERS_DEFAULT_RESULTS": "100",
        "USERS_MAX_RESULTS": "1000",
        "USERS_DEFAULT_TIMEOUT_MS": "15000",
        "USERS_MIN_TIMEOUT_MS": "2000",
        "USERS_MAX_TIMEOUT_MS": "60000",
        "LISTS_DEFAULT_RESULTS": "25",
        "LISTS_MAX_RESULTS": "100",
        "LISTS_DEFAULT_TIMEOUT_MS": "15000",
        "LISTS_MIN_TIMEOUT_MS": "2000",
        "LISTS_MAX_TIMEOUT_MS": "60000",
        "MEDIA_CHUNK_BYTES": "4194304",
        "MEDIA_POLL_INTERVAL_MS": "2000",
        "MEDIA_DEFAULT_TIMEOUT_MS": "120000",
        "MEDIA_MIN_TIMEOUT_MS": "5000",
        "MEDIA_MAX_TIMEOUT_MS": "600000"
      }
    }
  }
}
extensions:
  "mcp-x":
    enabled: true
    name: "mcp-x"
    type: stdio
    cmd: "docker"
    args:
      - "run"
      - "-i"
      - "--rm"
      - "-e"
      - "X_API_KEY"
      - "-e"
      - "X_API_KEY_SECRET"
      - "-e"
      - "X_ACCESS_TOKEN"
      - "-e"
      - "X_ACCESS_TOKEN_SECRET"
      - "-e"
      - "MEDIA_ROOT"
      - "-e"
      - "MCP_TRANSPORT"
      - "-e"
      - "MCP_NAME"
      - "-e"
      - "MCP_PATH"
      - "-e"
      - "SERVER_PORT"
      - "-e"
      - "SERVER_READ_TIMEOUT"
      - "-e"
      - "SERVER_WRITE_TIMEOUT"
      - "-e"
      - "LOG_MODE"
      - "-e"
      - "MAX_IDLE_CONNS_PER_HOST"
      - "-e"
      - "X_DEBUG"
      - "-e"
      - "POSTS_MAX_QUERIES"
      - "-e"
      - "POSTS_MAX_USERNAMES"
      - "-e"
      - "POSTS_MAX_IDS"
      - "-e"
      - "POSTS_DEFAULT_RESULTS"
      - "-e"
      - "POSTS_MAX_RESULTS"
      - "-e"
      - "POSTS_DEFAULT_DAYS"
      - "-e"
      - "POSTS_MAX_DAYS"
      - "-e"
      - "POSTS_DEFAULT_TIMEOUT_MS"
      - "-e"
      - "POSTS_MIN_TIMEOUT_MS"
      - "-e"
      - "POSTS_MAX_TIMEOUT_MS"
      - "-e"
      - "USERS_MAX_USERNAMES"
      - "-e"
      - "USERS_MAX_IDS"
      - "-e"
      - "USERS_DEFAULT_RESULTS"
      - "-e"
      - "USERS_MAX_RESULTS"
      - "-e"
      - "USERS_DEFAULT_TIMEOUT_MS"
      - "-e"
      - "USERS_MIN_TIMEOUT_MS"
      - "-e"
      - "USERS_MAX_TIMEOUT_MS"
      - "-e"
      - "LISTS_DEFAULT_RESULTS"
      - "-e"
      - "LISTS_MAX_RESULTS"
      - "-e"
      - "LISTS_DEFAULT_TIMEOUT_MS"
      - "-e"
      - "LISTS_MIN_TIMEOUT_MS"
      - "-e"
      - "LISTS_MAX_TIMEOUT_MS"
      - "-e"
      - "MEDIA_CHUNK_BYTES"
      - "-e"
      - "MEDIA_POLL_INTERVAL_MS"
      - "-e"
      - "MEDIA_DEFAULT_TIMEOUT_MS"
      - "-e"
      - "MEDIA_MIN_TIMEOUT_MS"
      - "-e"
      - "MEDIA_MAX_TIMEOUT_MS"
      - "ghcr.io/role1776/mcp-x:0.1.1"
    envs:
      "X_API_KEY": "${X_API_KEY}"
      "X_API_KEY_SECRET": "${X_API_KEY_SECRET}"
      "X_ACCESS_TOKEN": "${X_ACCESS_TOKEN}"
      "X_ACCESS_TOKEN_SECRET": "${X_ACCESS_TOKEN_SECRET}"
      "MEDIA_ROOT": "${MEDIA_ROOT}"
      "MCP_TRANSPORT": "stdio"
      "MCP_NAME": "mcp-x"
      "MCP_PATH": "/mcp"
      "SERVER_PORT": "8080"
      "SERVER_READ_TIMEOUT": "60s"
      "SERVER_WRITE_TIMEOUT": "60s"
      "LOG_MODE": "local"
      "MAX_IDLE_CONNS_PER_HOST": "100"
      "X_DEBUG": "false"
      "POSTS_MAX_QUERIES": "5"
      "POSTS_MAX_USERNAMES": "5"
      "POSTS_MAX_IDS": "100"
      "POSTS_DEFAULT_RESULTS": "10"
      "POSTS_MAX_RESULTS": "100"
      "POSTS_DEFAULT_DAYS": "7"
      "POSTS_MAX_DAYS": "7"
      "POSTS_DEFAULT_TIMEOUT_MS": "15000"
      "POSTS_MIN_TIMEOUT_MS": "2000"
      "POSTS_MAX_TIMEOUT_MS": "60000"
      "USERS_MAX_USERNAMES": "100"
      "USERS_MAX_IDS": "100"
      "USERS_DEFAULT_RESULTS": "100"
      "USERS_MAX_RESULTS": "1000"
      "USERS_DEFAULT_TIMEOUT_MS": "15000"
      "USERS_MIN_TIMEOUT_MS": "2000"
      "USERS_MAX_TIMEOUT_MS": "60000"
      "LISTS_DEFAULT_RESULTS": "25"
      "LISTS_MAX_RESULTS": "100"
      "LISTS_DEFAULT_TIMEOUT_MS": "15000"
      "LISTS_MIN_TIMEOUT_MS": "2000"
      "LISTS_MAX_TIMEOUT_MS": "60000"
      "MEDIA_CHUNK_BYTES": "4194304"
      "MEDIA_POLL_INTERVAL_MS": "2000"
      "MEDIA_DEFAULT_TIMEOUT_MS": "120000"
      "MEDIA_MIN_TIMEOUT_MS": "5000"
      "MEDIA_MAX_TIMEOUT_MS": "600000"
    timeout: 300

Placeholders to fill from your own secret store: ${X_API_KEY}, ${X_API_KEY_SECRET}, ${X_ACCESS_TOKEN}, ${X_ACCESS_TOKEN_SECRET}. The registry never accepts secret values.

This is a local package: the command runs on your machine.

Quality – / 100not scored

Not scored: fewer than three checks apply, usually because no remote answered a credential-free probe or the server is a local package.

protocoln/a · weight 25
  • n/a
    protocol.modern, protocol.stateless, protocol.transport, protocol.list_ttlno remote answered a protocol handshake (not probed yet, unreachable, or local-only)
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygienen/a · weight 30
  • n/a
    tools.descriptions, tools.description_length, tools.schemas, tools.annotations, tools.directory_hints, tools.token_cost, tools.api_dumptool list unknown (behind auth, not probed, or empty)
stabilityn/a · weight 15
  • n/a
    stability.changes, stability.rug_pulltool list unknown
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

Tool list unknown · checked 2026-10-20 07:21 UTC

Tool changes

No tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 90 / 100

provenance90
livenessn/a
freshness85
hygiene95

+repository +namespace-matches-repo +website ~liveness-unmeasured ~updated-41d-ago -unpinned-packages(1)

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

packageregistryversionruntimesecrets
ghcr.io/role1776/mcp-x:0.1.1ociunpinned–X_API_KEY, X_API_KEY_SECRET, X_ACCESS_TOKEN, X_ACCESS_TOKEN_SECRET
https://github.com/Role1776/mcp-x/releases/download/v0.1.1/mcp-x_0.1.1_darwin_amd64.mcpbmcpb0.1.1–X_API_KEY, X_API_KEY_SECRET, X_ACCESS_TOKEN, X_ACCESS_TOKEN_SECRET
https://github.com/Role1776/mcp-x/releases/download/v0.1.1/mcp-x_0.1.1_darwin_arm64.mcpbmcpb0.1.1–X_API_KEY, X_API_KEY_SECRET, X_ACCESS_TOKEN, X_ACCESS_TOKEN_SECRET
https://github.com/Role1776/mcp-x/releases/download/v0.1.1/mcp-x_0.1.1_linux_amd64.mcpbmcpb0.1.1–X_API_KEY, X_API_KEY_SECRET, X_ACCESS_TOKEN, X_ACCESS_TOKEN_SECRET
https://github.com/Role1776/mcp-x/releases/download/v0.1.1/mcp-x_0.1.1_linux_arm64.mcpbmcpb0.1.1–X_API_KEY, X_API_KEY_SECRET, X_ACCESS_TOKEN, X_ACCESS_TOKEN_SECRET
https://github.com/Role1776/mcp-x/releases/download/v0.1.1/mcp-x_0.1.1_windows_amd64.mcpbmcpb0.1.1–X_API_KEY, X_API_KEY_SECRET, X_ACCESS_TOKEN, X_ACCESS_TOKEN_SECRET
https://github.com/Role1776/mcp-x/releases/download/v0.1.1/mcp-x_0.1.1_windows_arm64.mcpbmcpb0.1.1–X_API_KEY, X_API_KEY_SECRET, X_ACCESS_TOKEN, X_ACCESS_TOKEN_SECRET

Tools (0)

No tools observed. Local packages are never executed by the registry.

Schemas: list_tools.

Similar MCP servers

More from io.github.Role1776

Official server.json
{
  "name": "io.github.Role1776/mcp-x",
  "title": "X (Twitter)",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "version": "0.1.1",
  "packages": [
    {
      "transport": {
        "type": "stdio"
      },
      "identifier": "ghcr.io/role1776/mcp-x:0.1.1",
      "registryType": "oci",
      "environmentVariables": [
        {
          "name": "X_API_KEY",
          "isSecret": true,
          "isRequired": true,
          "description": "OAuth 1.0a consumer key. developer.x.com -> your project -> your app -> Keys and tokens."
        },
        {
          "name": "X_API_KEY_SECRET",
          "isSecret": true,
          "isRequired": true,
          "description": "OAuth 1.0a consumer secret, issued together with X_API_KEY."
        },
        {
          "name": "X_ACCESS_TOKEN",
          "isSecret": true,
          "isRequired": true,
          "description": "User access token. Set the app permissions to Read and Write BEFORE generating it: a token keeps the permissions it was created with, and a read-only one fails every write until it is regenerated."
        },
        {
          "name": "X_ACCESS_TOKEN_SECRET",
          "isSecret": true,
          "isRequired": true,
          "description": "User access token secret, issued together with X_ACCESS_TOKEN."
        },
        {
          "name": "MEDIA_ROOT",
          "format": "filepath",
          "isRequired": true,
          "description": "Absolute path to an existing directory - the only one x_media_upload may read files from. Anything outside it is refused, symlinks included. Checked at startup.",
          "placeholder": "/tmp/mcp-x-media"
        },
        {
          "name": "MCP_TRANSPORT",
          "choices": [
            "stdio",
            "http"
          ],
          "default": "stdio",
          "description": "stdio (client spawns the process) or http (streamable HTTP listener)."
        },
        {
          "name": "MCP_NAME",
          "default": "mcp-x",
          "description": "Server name reported in the MCP initialize handshake."
        },
        {
          "name": "MCP_PATH",
          "default": "/mcp",
          "description": "HTTP path the MCP endpoint is served on. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "SERVER_PORT",
          "default": "8080",
          "description": "TCP port to listen on. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "SERVER_READ_TIMEOUT",
          "default": "60s",
          "description": "HTTP read timeout as a Go duration. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "SERVER_WRITE_TIMEOUT",
          "default": "60s",
          "description": "HTTP write timeout as a Go duration. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "LOG_MODE",
          "choices": [
            "local",
            "prod"
          ],
          "default": "local",
          "description": "local (text, debug) or prod (JSON, info). Logs go to stderr."
        },
        {
          "name": "MAX_IDLE_CONNS_PER_HOST",
          "format": "number",
          "default": "100",
          "description": "Idle connections the outbound HTTP client keeps per host."
        },
        {
          "name": "X_DEBUG",
          "format": "boolean",
          "choices": [
            "false",
            "true"
          ],
          "default": "false",
          "description": "Log the raw requests sent to the X API. Verbose; the output can contain request details, so keep it off outside debugging."
        },
        {
          "name": "POSTS_MAX_QUERIES",
          "format": "number",
          "default": "5",
          "description": "Queries accepted in one x_posts_search or x_posts_count call."
        },
        {
          "name": "POSTS_MAX_USERNAMES",
          "format": "number",
          "default": "5",
          "description": "Usernames accepted in one x_posts_by_user call."
        },
        {
          "name": "POSTS_MAX_IDS",
          "format": "number",
          "default": "100",
          "description": "Post ids accepted in one x_posts_lookup call. The X API caps this at 100."
        },
        {
          "name": "POSTS_DEFAULT_RESULTS",
          "format": "number",
          "default": "10",
          "description": "Posts returned per query when the call does not ask for a count. Every post returned is billed."
        },
        {
          "name": "POSTS_MAX_RESULTS",
          "format": "number",
          "default": "100",
          "description": "Upper bound for posts per query. The X API caps this at 100."
        },
        {
          "name": "POSTS_DEFAULT_DAYS",
          "format": "number",
          "default": "7",
          "description": "How far back post searches look when the call does not say, in days."
        },
        {
          "name": "POSTS_MAX_DAYS",
          "format": "number",
          "default": "7",
          "description": "Furthest back a post search may look, in days. Recent search cannot exceed 7."
        },
        {
          "name": "POSTS_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "15000",
          "description": "Timeout for a posts call in milliseconds when the call does not request one."
        },
        {
          "name": "POSTS_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "2000",
          "description": "Lowest timeout a posts call may request, in milliseconds."
        },
        {
          "name": "POSTS_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "60000",
          "description": "Highest timeout a posts call may request, in milliseconds."
        },
        {
          "name": "USERS_MAX_USERNAMES",
          "format": "number",
          "default": "100",
          "description": "Usernames accepted in one x_users_lookup call. The X API caps this at 100."
        },
        {
          "name": "USERS_MAX_IDS",
          "format": "number",
          "default": "100",
          "description": "User ids accepted in one x_users_lookup call. The X API caps this at 100."
        },
        {
          "name": "USERS_DEFAULT_RESULTS",
          "format": "number",
          "default": "100",
          "description": "Users returned per page when the call does not ask for a count."
        },
        {
          "name": "USERS_MAX_RESULTS",
          "format": "number",
          "default": "1000",
          "description": "Upper bound for users per page."
        },
        {
          "name": "USERS_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "15000",
          "description": "Timeout for a users call in milliseconds when the call does not request one."
        },
        {
          "name": "USERS_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "2000",
          "description": "Lowest timeout a users call may request, in milliseconds."
        },
        {
          "name": "USERS_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "60000",
          "description": "Highest timeout a users call may request, in milliseconds."
        },
        {
          "name": "LISTS_DEFAULT_RESULTS",
          "format": "number",
          "default": "25",
          "description": "Items returned per list page when the call does not ask for a count."
        },
        {
          "name": "LISTS_MAX_RESULTS",
          "format": "number",
          "default": "100",
          "description": "Upper bound for items per list page. The X API caps this at 100."
        },
        {
          "name": "LISTS_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "15000",
          "description": "Timeout for a lists call in milliseconds when the call does not request one."
        },
        {
          "name": "LISTS_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "2000",
          "description": "Lowest timeout a lists call may request, in milliseconds."
        },
        {
          "name": "LISTS_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "60000",
          "description": "Highest timeout a lists call may request, in milliseconds."
        },
        {
          "name": "MEDIA_CHUNK_BYTES",
          "format": "number",
          "default": "4194304",
          "description": "Bytes per upload segment. The X APPEND endpoint caps a segment at 5 MB."
        },
        {
          "name": "MEDIA_POLL_INTERVAL_MS",
          "format": "number",
          "default": "2000",
          "description": "How often the upload status is polled while X transcodes a video, in milliseconds."
        },
        {
          "name": "MEDIA_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "120000",
          "description": "Timeout for a whole upload in milliseconds when the call does not request one."
        },
        {
          "name": "MEDIA_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "5000",
          "description": "Lowest timeout an upload may request, in milliseconds."
        },
        {
          "name": "MEDIA_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "600000",
          "description": "Highest timeout an upload may request, in milliseconds."
        }
      ]
    },
    {
      "version": "0.1.1",
      "transport": {
        "type": "stdio"
      },
      "fileSha256": "a03708ee99d959ba85805da75626da672ff23b95265114241b639c8d69cba20d",
      "identifier": "https://github.com/Role1776/mcp-x/releases/download/v0.1.1/mcp-x_0.1.1_darwin_amd64.mcpb",
      "registryType": "mcpb",
      "environmentVariables": [
        {
          "name": "X_API_KEY",
          "isSecret": true,
          "isRequired": true,
          "description": "OAuth 1.0a consumer key. developer.x.com -> your project -> your app -> Keys and tokens."
        },
        {
          "name": "X_API_KEY_SECRET",
          "isSecret": true,
          "isRequired": true,
          "description": "OAuth 1.0a consumer secret, issued together with X_API_KEY."
        },
        {
          "name": "X_ACCESS_TOKEN",
          "isSecret": true,
          "isRequired": true,
          "description": "User access token. Set the app permissions to Read and Write BEFORE generating it: a token keeps the permissions it was created with, and a read-only one fails every write until it is regenerated."
        },
        {
          "name": "X_ACCESS_TOKEN_SECRET",
          "isSecret": true,
          "isRequired": true,
          "description": "User access token secret, issued together with X_ACCESS_TOKEN."
        },
        {
          "name": "MEDIA_ROOT",
          "format": "filepath",
          "isRequired": true,
          "description": "Absolute path to an existing directory - the only one x_media_upload may read files from. Anything outside it is refused, symlinks included. Checked at startup.",
          "placeholder": "/tmp/mcp-x-media"
        },
        {
          "name": "MCP_TRANSPORT",
          "choices": [
            "stdio",
            "http"
          ],
          "default": "stdio",
          "description": "stdio (client spawns the process) or http (streamable HTTP listener)."
        },
        {
          "name": "MCP_NAME",
          "default": "mcp-x",
          "description": "Server name reported in the MCP initialize handshake."
        },
        {
          "name": "MCP_PATH",
          "default": "/mcp",
          "description": "HTTP path the MCP endpoint is served on. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "SERVER_PORT",
          "default": "8080",
          "description": "TCP port to listen on. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "SERVER_READ_TIMEOUT",
          "default": "60s",
          "description": "HTTP read timeout as a Go duration. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "SERVER_WRITE_TIMEOUT",
          "default": "60s",
          "description": "HTTP write timeout as a Go duration. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "LOG_MODE",
          "choices": [
            "local",
            "prod"
          ],
          "default": "local",
          "description": "local (text, debug) or prod (JSON, info). Logs go to stderr."
        },
        {
          "name": "MAX_IDLE_CONNS_PER_HOST",
          "format": "number",
          "default": "100",
          "description": "Idle connections the outbound HTTP client keeps per host."
        },
        {
          "name": "X_DEBUG",
          "format": "boolean",
          "choices": [
            "false",
            "true"
          ],
          "default": "false",
          "description": "Log the raw requests sent to the X API. Verbose; the output can contain request details, so keep it off outside debugging."
        },
        {
          "name": "POSTS_MAX_QUERIES",
          "format": "number",
          "default": "5",
          "description": "Queries accepted in one x_posts_search or x_posts_count call."
        },
        {
          "name": "POSTS_MAX_USERNAMES",
          "format": "number",
          "default": "5",
          "description": "Usernames accepted in one x_posts_by_user call."
        },
        {
          "name": "POSTS_MAX_IDS",
          "format": "number",
          "default": "100",
          "description": "Post ids accepted in one x_posts_lookup call. The X API caps this at 100."
        },
        {
          "name": "POSTS_DEFAULT_RESULTS",
          "format": "number",
          "default": "10",
          "description": "Posts returned per query when the call does not ask for a count. Every post returned is billed."
        },
        {
          "name": "POSTS_MAX_RESULTS",
          "format": "number",
          "default": "100",
          "description": "Upper bound for posts per query. The X API caps this at 100."
        },
        {
          "name": "POSTS_DEFAULT_DAYS",
          "format": "number",
          "default": "7",
          "description": "How far back post searches look when the call does not say, in days."
        },
        {
          "name": "POSTS_MAX_DAYS",
          "format": "number",
          "default": "7",
          "description": "Furthest back a post search may look, in days. Recent search cannot exceed 7."
        },
        {
          "name": "POSTS_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "15000",
          "description": "Timeout for a posts call in milliseconds when the call does not request one."
        },
        {
          "name": "POSTS_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "2000",
          "description": "Lowest timeout a posts call may request, in milliseconds."
        },
        {
          "name": "POSTS_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "60000",
          "description": "Highest timeout a posts call may request, in milliseconds."
        },
        {
          "name": "USERS_MAX_USERNAMES",
          "format": "number",
          "default": "100",
          "description": "Usernames accepted in one x_users_lookup call. The X API caps this at 100."
        },
        {
          "name": "USERS_MAX_IDS",
          "format": "number",
          "default": "100",
          "description": "User ids accepted in one x_users_lookup call. The X API caps this at 100."
        },
        {
          "name": "USERS_DEFAULT_RESULTS",
          "format": "number",
          "default": "100",
          "description": "Users returned per page when the call does not ask for a count."
        },
        {
          "name": "USERS_MAX_RESULTS",
          "format": "number",
          "default": "1000",
          "description": "Upper bound for users per page."
        },
        {
          "name": "USERS_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "15000",
          "description": "Timeout for a users call in milliseconds when the call does not request one."
        },
        {
          "name": "USERS_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "2000",
          "description": "Lowest timeout a users call may request, in milliseconds."
        },
        {
          "name": "USERS_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "60000",
          "description": "Highest timeout a users call may request, in milliseconds."
        },
        {
          "name": "LISTS_DEFAULT_RESULTS",
          "format": "number",
          "default": "25",
          "description": "Items returned per list page when the call does not ask for a count."
        },
        {
          "name": "LISTS_MAX_RESULTS",
          "format": "number",
          "default": "100",
          "description": "Upper bound for items per list page. The X API caps this at 100."
        },
        {
          "name": "LISTS_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "15000",
          "description": "Timeout for a lists call in milliseconds when the call does not request one."
        },
        {
          "name": "LISTS_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "2000",
          "description": "Lowest timeout a lists call may request, in milliseconds."
        },
        {
          "name": "LISTS_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "60000",
          "description": "Highest timeout a lists call may request, in milliseconds."
        },
        {
          "name": "MEDIA_CHUNK_BYTES",
          "format": "number",
          "default": "4194304",
          "description": "Bytes per upload segment. The X APPEND endpoint caps a segment at 5 MB."
        },
        {
          "name": "MEDIA_POLL_INTERVAL_MS",
          "format": "number",
          "default": "2000",
          "description": "How often the upload status is polled while X transcodes a video, in milliseconds."
        },
        {
          "name": "MEDIA_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "120000",
          "description": "Timeout for a whole upload in milliseconds when the call does not request one."
        },
        {
          "name": "MEDIA_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "5000",
          "description": "Lowest timeout an upload may request, in milliseconds."
        },
        {
          "name": "MEDIA_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "600000",
          "description": "Highest timeout an upload may request, in milliseconds."
        }
      ]
    },
    {
      "version": "0.1.1",
      "transport": {
        "type": "stdio"
      },
      "fileSha256": "380cffa9ae22f79abd6fc9e02e527d5241039049d376daf350a6c65f80bd6cd3",
      "identifier": "https://github.com/Role1776/mcp-x/releases/download/v0.1.1/mcp-x_0.1.1_darwin_arm64.mcpb",
      "registryType": "mcpb",
      "environmentVariables": [
        {
          "name": "X_API_KEY",
          "isSecret": true,
          "isRequired": true,
          "description": "OAuth 1.0a consumer key. developer.x.com -> your project -> your app -> Keys and tokens."
        },
        {
          "name": "X_API_KEY_SECRET",
          "isSecret": true,
          "isRequired": true,
          "description": "OAuth 1.0a consumer secret, issued together with X_API_KEY."
        },
        {
          "name": "X_ACCESS_TOKEN",
          "isSecret": true,
          "isRequired": true,
          "description": "User access token. Set the app permissions to Read and Write BEFORE generating it: a token keeps the permissions it was created with, and a read-only one fails every write until it is regenerated."
        },
        {
          "name": "X_ACCESS_TOKEN_SECRET",
          "isSecret": true,
          "isRequired": true,
          "description": "User access token secret, issued together with X_ACCESS_TOKEN."
        },
        {
          "name": "MEDIA_ROOT",
          "format": "filepath",
          "isRequired": true,
          "description": "Absolute path to an existing directory - the only one x_media_upload may read files from. Anything outside it is refused, symlinks included. Checked at startup.",
          "placeholder": "/tmp/mcp-x-media"
        },
        {
          "name": "MCP_TRANSPORT",
          "choices": [
            "stdio",
            "http"
          ],
          "default": "stdio",
          "description": "stdio (client spawns the process) or http (streamable HTTP listener)."
        },
        {
          "name": "MCP_NAME",
          "default": "mcp-x",
          "description": "Server name reported in the MCP initialize handshake."
        },
        {
          "name": "MCP_PATH",
          "default": "/mcp",
          "description": "HTTP path the MCP endpoint is served on. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "SERVER_PORT",
          "default": "8080",
          "description": "TCP port to listen on. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "SERVER_READ_TIMEOUT",
          "default": "60s",
          "description": "HTTP read timeout as a Go duration. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "SERVER_WRITE_TIMEOUT",
          "default": "60s",
          "description": "HTTP write timeout as a Go duration. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "LOG_MODE",
          "choices": [
            "local",
            "prod"
          ],
          "default": "local",
          "description": "local (text, debug) or prod (JSON, info). Logs go to stderr."
        },
        {
          "name": "MAX_IDLE_CONNS_PER_HOST",
          "format": "number",
          "default": "100",
          "description": "Idle connections the outbound HTTP client keeps per host."
        },
        {
          "name": "X_DEBUG",
          "format": "boolean",
          "choices": [
            "false",
            "true"
          ],
          "default": "false",
          "description": "Log the raw requests sent to the X API. Verbose; the output can contain request details, so keep it off outside debugging."
        },
        {
          "name": "POSTS_MAX_QUERIES",
          "format": "number",
          "default": "5",
          "description": "Queries accepted in one x_posts_search or x_posts_count call."
        },
        {
          "name": "POSTS_MAX_USERNAMES",
          "format": "number",
          "default": "5",
          "description": "Usernames accepted in one x_posts_by_user call."
        },
        {
          "name": "POSTS_MAX_IDS",
          "format": "number",
          "default": "100",
          "description": "Post ids accepted in one x_posts_lookup call. The X API caps this at 100."
        },
        {
          "name": "POSTS_DEFAULT_RESULTS",
          "format": "number",
          "default": "10",
          "description": "Posts returned per query when the call does not ask for a count. Every post returned is billed."
        },
        {
          "name": "POSTS_MAX_RESULTS",
          "format": "number",
          "default": "100",
          "description": "Upper bound for posts per query. The X API caps this at 100."
        },
        {
          "name": "POSTS_DEFAULT_DAYS",
          "format": "number",
          "default": "7",
          "description": "How far back post searches look when the call does not say, in days."
        },
        {
          "name": "POSTS_MAX_DAYS",
          "format": "number",
          "default": "7",
          "description": "Furthest back a post search may look, in days. Recent search cannot exceed 7."
        },
        {
          "name": "POSTS_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "15000",
          "description": "Timeout for a posts call in milliseconds when the call does not request one."
        },
        {
          "name": "POSTS_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "2000",
          "description": "Lowest timeout a posts call may request, in milliseconds."
        },
        {
          "name": "POSTS_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "60000",
          "description": "Highest timeout a posts call may request, in milliseconds."
        },
        {
          "name": "USERS_MAX_USERNAMES",
          "format": "number",
          "default": "100",
          "description": "Usernames accepted in one x_users_lookup call. The X API caps this at 100."
        },
        {
          "name": "USERS_MAX_IDS",
          "format": "number",
          "default": "100",
          "description": "User ids accepted in one x_users_lookup call. The X API caps this at 100."
        },
        {
          "name": "USERS_DEFAULT_RESULTS",
          "format": "number",
          "default": "100",
          "description": "Users returned per page when the call does not ask for a count."
        },
        {
          "name": "USERS_MAX_RESULTS",
          "format": "number",
          "default": "1000",
          "description": "Upper bound for users per page."
        },
        {
          "name": "USERS_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "15000",
          "description": "Timeout for a users call in milliseconds when the call does not request one."
        },
        {
          "name": "USERS_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "2000",
          "description": "Lowest timeout a users call may request, in milliseconds."
        },
        {
          "name": "USERS_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "60000",
          "description": "Highest timeout a users call may request, in milliseconds."
        },
        {
          "name": "LISTS_DEFAULT_RESULTS",
          "format": "number",
          "default": "25",
          "description": "Items returned per list page when the call does not ask for a count."
        },
        {
          "name": "LISTS_MAX_RESULTS",
          "format": "number",
          "default": "100",
          "description": "Upper bound for items per list page. The X API caps this at 100."
        },
        {
          "name": "LISTS_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "15000",
          "description": "Timeout for a lists call in milliseconds when the call does not request one."
        },
        {
          "name": "LISTS_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "2000",
          "description": "Lowest timeout a lists call may request, in milliseconds."
        },
        {
          "name": "LISTS_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "60000",
          "description": "Highest timeout a lists call may request, in milliseconds."
        },
        {
          "name": "MEDIA_CHUNK_BYTES",
          "format": "number",
          "default": "4194304",
          "description": "Bytes per upload segment. The X APPEND endpoint caps a segment at 5 MB."
        },
        {
          "name": "MEDIA_POLL_INTERVAL_MS",
          "format": "number",
          "default": "2000",
          "description": "How often the upload status is polled while X transcodes a video, in milliseconds."
        },
        {
          "name": "MEDIA_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "120000",
          "description": "Timeout for a whole upload in milliseconds when the call does not request one."
        },
        {
          "name": "MEDIA_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "5000",
          "description": "Lowest timeout an upload may request, in milliseconds."
        },
        {
          "name": "MEDIA_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "600000",
          "description": "Highest timeout an upload may request, in milliseconds."
        }
      ]
    },
    {
      "version": "0.1.1",
      "transport": {
        "type": "stdio"
      },
      "fileSha256": "2aefd2aa0b66cad435836dd55cad2c2c0c16260a7757780b6cfc83f0f2de81f0",
      "identifier": "https://github.com/Role1776/mcp-x/releases/download/v0.1.1/mcp-x_0.1.1_linux_amd64.mcpb",
      "registryType": "mcpb",
      "environmentVariables": [
        {
          "name": "X_API_KEY",
          "isSecret": true,
          "isRequired": true,
          "description": "OAuth 1.0a consumer key. developer.x.com -> your project -> your app -> Keys and tokens."
        },
        {
          "name": "X_API_KEY_SECRET",
          "isSecret": true,
          "isRequired": true,
          "description": "OAuth 1.0a consumer secret, issued together with X_API_KEY."
        },
        {
          "name": "X_ACCESS_TOKEN",
          "isSecret": true,
          "isRequired": true,
          "description": "User access token. Set the app permissions to Read and Write BEFORE generating it: a token keeps the permissions it was created with, and a read-only one fails every write until it is regenerated."
        },
        {
          "name": "X_ACCESS_TOKEN_SECRET",
          "isSecret": true,
          "isRequired": true,
          "description": "User access token secret, issued together with X_ACCESS_TOKEN."
        },
        {
          "name": "MEDIA_ROOT",
          "format": "filepath",
          "isRequired": true,
          "description": "Absolute path to an existing directory - the only one x_media_upload may read files from. Anything outside it is refused, symlinks included. Checked at startup.",
          "placeholder": "/tmp/mcp-x-media"
        },
        {
          "name": "MCP_TRANSPORT",
          "choices": [
            "stdio",
            "http"
          ],
          "default": "stdio",
          "description": "stdio (client spawns the process) or http (streamable HTTP listener)."
        },
        {
          "name": "MCP_NAME",
          "default": "mcp-x",
          "description": "Server name reported in the MCP initialize handshake."
        },
        {
          "name": "MCP_PATH",
          "default": "/mcp",
          "description": "HTTP path the MCP endpoint is served on. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "SERVER_PORT",
          "default": "8080",
          "description": "TCP port to listen on. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "SERVER_READ_TIMEOUT",
          "default": "60s",
          "description": "HTTP read timeout as a Go duration. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "SERVER_WRITE_TIMEOUT",
          "default": "60s",
          "description": "HTTP write timeout as a Go duration. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "LOG_MODE",
          "choices": [
            "local",
            "prod"
          ],
          "default": "local",
          "description": "local (text, debug) or prod (JSON, info). Logs go to stderr."
        },
        {
          "name": "MAX_IDLE_CONNS_PER_HOST",
          "format": "number",
          "default": "100",
          "description": "Idle connections the outbound HTTP client keeps per host."
        },
        {
          "name": "X_DEBUG",
          "format": "boolean",
          "choices": [
            "false",
            "true"
          ],
          "default": "false",
          "description": "Log the raw requests sent to the X API. Verbose; the output can contain request details, so keep it off outside debugging."
        },
        {
          "name": "POSTS_MAX_QUERIES",
          "format": "number",
          "default": "5",
          "description": "Queries accepted in one x_posts_search or x_posts_count call."
        },
        {
          "name": "POSTS_MAX_USERNAMES",
          "format": "number",
          "default": "5",
          "description": "Usernames accepted in one x_posts_by_user call."
        },
        {
          "name": "POSTS_MAX_IDS",
          "format": "number",
          "default": "100",
          "description": "Post ids accepted in one x_posts_lookup call. The X API caps this at 100."
        },
        {
          "name": "POSTS_DEFAULT_RESULTS",
          "format": "number",
          "default": "10",
          "description": "Posts returned per query when the call does not ask for a count. Every post returned is billed."
        },
        {
          "name": "POSTS_MAX_RESULTS",
          "format": "number",
          "default": "100",
          "description": "Upper bound for posts per query. The X API caps this at 100."
        },
        {
          "name": "POSTS_DEFAULT_DAYS",
          "format": "number",
          "default": "7",
          "description": "How far back post searches look when the call does not say, in days."
        },
        {
          "name": "POSTS_MAX_DAYS",
          "format": "number",
          "default": "7",
          "description": "Furthest back a post search may look, in days. Recent search cannot exceed 7."
        },
        {
          "name": "POSTS_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "15000",
          "description": "Timeout for a posts call in milliseconds when the call does not request one."
        },
        {
          "name": "POSTS_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "2000",
          "description": "Lowest timeout a posts call may request, in milliseconds."
        },
        {
          "name": "POSTS_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "60000",
          "description": "Highest timeout a posts call may request, in milliseconds."
        },
        {
          "name": "USERS_MAX_USERNAMES",
          "format": "number",
          "default": "100",
          "description": "Usernames accepted in one x_users_lookup call. The X API caps this at 100."
        },
        {
          "name": "USERS_MAX_IDS",
          "format": "number",
          "default": "100",
          "description": "User ids accepted in one x_users_lookup call. The X API caps this at 100."
        },
        {
          "name": "USERS_DEFAULT_RESULTS",
          "format": "number",
          "default": "100",
          "description": "Users returned per page when the call does not ask for a count."
        },
        {
          "name": "USERS_MAX_RESULTS",
          "format": "number",
          "default": "1000",
          "description": "Upper bound for users per page."
        },
        {
          "name": "USERS_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "15000",
          "description": "Timeout for a users call in milliseconds when the call does not request one."
        },
        {
          "name": "USERS_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "2000",
          "description": "Lowest timeout a users call may request, in milliseconds."
        },
        {
          "name": "USERS_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "60000",
          "description": "Highest timeout a users call may request, in milliseconds."
        },
        {
          "name": "LISTS_DEFAULT_RESULTS",
          "format": "number",
          "default": "25",
          "description": "Items returned per list page when the call does not ask for a count."
        },
        {
          "name": "LISTS_MAX_RESULTS",
          "format": "number",
          "default": "100",
          "description": "Upper bound for items per list page. The X API caps this at 100."
        },
        {
          "name": "LISTS_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "15000",
          "description": "Timeout for a lists call in milliseconds when the call does not request one."
        },
        {
          "name": "LISTS_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "2000",
          "description": "Lowest timeout a lists call may request, in milliseconds."
        },
        {
          "name": "LISTS_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "60000",
          "description": "Highest timeout a lists call may request, in milliseconds."
        },
        {
          "name": "MEDIA_CHUNK_BYTES",
          "format": "number",
          "default": "4194304",
          "description": "Bytes per upload segment. The X APPEND endpoint caps a segment at 5 MB."
        },
        {
          "name": "MEDIA_POLL_INTERVAL_MS",
          "format": "number",
          "default": "2000",
          "description": "How often the upload status is polled while X transcodes a video, in milliseconds."
        },
        {
          "name": "MEDIA_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "120000",
          "description": "Timeout for a whole upload in milliseconds when the call does not request one."
        },
        {
          "name": "MEDIA_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "5000",
          "description": "Lowest timeout an upload may request, in milliseconds."
        },
        {
          "name": "MEDIA_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "600000",
          "description": "Highest timeout an upload may request, in milliseconds."
        }
      ]
    },
    {
      "version": "0.1.1",
      "transport": {
        "type": "stdio"
      },
      "fileSha256": "bea4f1da09ae5f6fc2faeda8bf5d62d1323628b5e1360d1fe9f450596d8ecedb",
      "identifier": "https://github.com/Role1776/mcp-x/releases/download/v0.1.1/mcp-x_0.1.1_linux_arm64.mcpb",
      "registryType": "mcpb",
      "environmentVariables": [
        {
          "name": "X_API_KEY",
          "isSecret": true,
          "isRequired": true,
          "description": "OAuth 1.0a consumer key. developer.x.com -> your project -> your app -> Keys and tokens."
        },
        {
          "name": "X_API_KEY_SECRET",
          "isSecret": true,
          "isRequired": true,
          "description": "OAuth 1.0a consumer secret, issued together with X_API_KEY."
        },
        {
          "name": "X_ACCESS_TOKEN",
          "isSecret": true,
          "isRequired": true,
          "description": "User access token. Set the app permissions to Read and Write BEFORE generating it: a token keeps the permissions it was created with, and a read-only one fails every write until it is regenerated."
        },
        {
          "name": "X_ACCESS_TOKEN_SECRET",
          "isSecret": true,
          "isRequired": true,
          "description": "User access token secret, issued together with X_ACCESS_TOKEN."
        },
        {
          "name": "MEDIA_ROOT",
          "format": "filepath",
          "isRequired": true,
          "description": "Absolute path to an existing directory - the only one x_media_upload may read files from. Anything outside it is refused, symlinks included. Checked at startup.",
          "placeholder": "/tmp/mcp-x-media"
        },
        {
          "name": "MCP_TRANSPORT",
          "choices": [
            "stdio",
            "http"
          ],
          "default": "stdio",
          "description": "stdio (client spawns the process) or http (streamable HTTP listener)."
        },
        {
          "name": "MCP_NAME",
          "default": "mcp-x",
          "description": "Server name reported in the MCP initialize handshake."
        },
        {
          "name": "MCP_PATH",
          "default": "/mcp",
          "description": "HTTP path the MCP endpoint is served on. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "SERVER_PORT",
          "default": "8080",
          "description": "TCP port to listen on. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "SERVER_READ_TIMEOUT",
          "default": "60s",
          "description": "HTTP read timeout as a Go duration. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "SERVER_WRITE_TIMEOUT",
          "default": "60s",
          "description": "HTTP write timeout as a Go duration. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "LOG_MODE",
          "choices": [
            "local",
            "prod"
          ],
          "default": "local",
          "description": "local (text, debug) or prod (JSON, info). Logs go to stderr."
        },
        {
          "name": "MAX_IDLE_CONNS_PER_HOST",
          "format": "number",
          "default": "100",
          "description": "Idle connections the outbound HTTP client keeps per host."
        },
        {
          "name": "X_DEBUG",
          "format": "boolean",
          "choices": [
            "false",
            "true"
          ],
          "default": "false",
          "description": "Log the raw requests sent to the X API. Verbose; the output can contain request details, so keep it off outside debugging."
        },
        {
          "name": "POSTS_MAX_QUERIES",
          "format": "number",
          "default": "5",
          "description": "Queries accepted in one x_posts_search or x_posts_count call."
        },
        {
          "name": "POSTS_MAX_USERNAMES",
          "format": "number",
          "default": "5",
          "description": "Usernames accepted in one x_posts_by_user call."
        },
        {
          "name": "POSTS_MAX_IDS",
          "format": "number",
          "default": "100",
          "description": "Post ids accepted in one x_posts_lookup call. The X API caps this at 100."
        },
        {
          "name": "POSTS_DEFAULT_RESULTS",
          "format": "number",
          "default": "10",
          "description": "Posts returned per query when the call does not ask for a count. Every post returned is billed."
        },
        {
          "name": "POSTS_MAX_RESULTS",
          "format": "number",
          "default": "100",
          "description": "Upper bound for posts per query. The X API caps this at 100."
        },
        {
          "name": "POSTS_DEFAULT_DAYS",
          "format": "number",
          "default": "7",
          "description": "How far back post searches look when the call does not say, in days."
        },
        {
          "name": "POSTS_MAX_DAYS",
          "format": "number",
          "default": "7",
          "description": "Furthest back a post search may look, in days. Recent search cannot exceed 7."
        },
        {
          "name": "POSTS_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "15000",
          "description": "Timeout for a posts call in milliseconds when the call does not request one."
        },
        {
          "name": "POSTS_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "2000",
          "description": "Lowest timeout a posts call may request, in milliseconds."
        },
        {
          "name": "POSTS_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "60000",
          "description": "Highest timeout a posts call may request, in milliseconds."
        },
        {
          "name": "USERS_MAX_USERNAMES",
          "format": "number",
          "default": "100",
          "description": "Usernames accepted in one x_users_lookup call. The X API caps this at 100."
        },
        {
          "name": "USERS_MAX_IDS",
          "format": "number",
          "default": "100",
          "description": "User ids accepted in one x_users_lookup call. The X API caps this at 100."
        },
        {
          "name": "USERS_DEFAULT_RESULTS",
          "format": "number",
          "default": "100",
          "description": "Users returned per page when the call does not ask for a count."
        },
        {
          "name": "USERS_MAX_RESULTS",
          "format": "number",
          "default": "1000",
          "description": "Upper bound for users per page."
        },
        {
          "name": "USERS_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "15000",
          "description": "Timeout for a users call in milliseconds when the call does not request one."
        },
        {
          "name": "USERS_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "2000",
          "description": "Lowest timeout a users call may request, in milliseconds."
        },
        {
          "name": "USERS_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "60000",
          "description": "Highest timeout a users call may request, in milliseconds."
        },
        {
          "name": "LISTS_DEFAULT_RESULTS",
          "format": "number",
          "default": "25",
          "description": "Items returned per list page when the call does not ask for a count."
        },
        {
          "name": "LISTS_MAX_RESULTS",
          "format": "number",
          "default": "100",
          "description": "Upper bound for items per list page. The X API caps this at 100."
        },
        {
          "name": "LISTS_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "15000",
          "description": "Timeout for a lists call in milliseconds when the call does not request one."
        },
        {
          "name": "LISTS_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "2000",
          "description": "Lowest timeout a lists call may request, in milliseconds."
        },
        {
          "name": "LISTS_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "60000",
          "description": "Highest timeout a lists call may request, in milliseconds."
        },
        {
          "name": "MEDIA_CHUNK_BYTES",
          "format": "number",
          "default": "4194304",
          "description": "Bytes per upload segment. The X APPEND endpoint caps a segment at 5 MB."
        },
        {
          "name": "MEDIA_POLL_INTERVAL_MS",
          "format": "number",
          "default": "2000",
          "description": "How often the upload status is polled while X transcodes a video, in milliseconds."
        },
        {
          "name": "MEDIA_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "120000",
          "description": "Timeout for a whole upload in milliseconds when the call does not request one."
        },
        {
          "name": "MEDIA_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "5000",
          "description": "Lowest timeout an upload may request, in milliseconds."
        },
        {
          "name": "MEDIA_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "600000",
          "description": "Highest timeout an upload may request, in milliseconds."
        }
      ]
    },
    {
      "version": "0.1.1",
      "transport": {
        "type": "stdio"
      },
      "fileSha256": "c16d8f6d6e0dbb294d5353b250269d78d9cef4c7e960613437d265c6824fe13f",
      "identifier": "https://github.com/Role1776/mcp-x/releases/download/v0.1.1/mcp-x_0.1.1_windows_amd64.mcpb",
      "registryType": "mcpb",
      "environmentVariables": [
        {
          "name": "X_API_KEY",
          "isSecret": true,
          "isRequired": true,
          "description": "OAuth 1.0a consumer key. developer.x.com -> your project -> your app -> Keys and tokens."
        },
        {
          "name": "X_API_KEY_SECRET",
          "isSecret": true,
          "isRequired": true,
          "description": "OAuth 1.0a consumer secret, issued together with X_API_KEY."
        },
        {
          "name": "X_ACCESS_TOKEN",
          "isSecret": true,
          "isRequired": true,
          "description": "User access token. Set the app permissions to Read and Write BEFORE generating it: a token keeps the permissions it was created with, and a read-only one fails every write until it is regenerated."
        },
        {
          "name": "X_ACCESS_TOKEN_SECRET",
          "isSecret": true,
          "isRequired": true,
          "description": "User access token secret, issued together with X_ACCESS_TOKEN."
        },
        {
          "name": "MEDIA_ROOT",
          "format": "filepath",
          "isRequired": true,
          "description": "Absolute path to an existing directory - the only one x_media_upload may read files from. Anything outside it is refused, symlinks included. Checked at startup.",
          "placeholder": "/tmp/mcp-x-media"
        },
        {
          "name": "MCP_TRANSPORT",
          "choices": [
            "stdio",
            "http"
          ],
          "default": "stdio",
          "description": "stdio (client spawns the process) or http (streamable HTTP listener)."
        },
        {
          "name": "MCP_NAME",
          "default": "mcp-x",
          "description": "Server name reported in the MCP initialize handshake."
        },
        {
          "name": "MCP_PATH",
          "default": "/mcp",
          "description": "HTTP path the MCP endpoint is served on. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "SERVER_PORT",
          "default": "8080",
          "description": "TCP port to listen on. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "SERVER_READ_TIMEOUT",
          "default": "60s",
          "description": "HTTP read timeout as a Go duration. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "SERVER_WRITE_TIMEOUT",
          "default": "60s",
          "description": "HTTP write timeout as a Go duration. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "LOG_MODE",
          "choices": [
            "local",
            "prod"
          ],
          "default": "local",
          "description": "local (text, debug) or prod (JSON, info). Logs go to stderr."
        },
        {
          "name": "MAX_IDLE_CONNS_PER_HOST",
          "format": "number",
          "default": "100",
          "description": "Idle connections the outbound HTTP client keeps per host."
        },
        {
          "name": "X_DEBUG",
          "format": "boolean",
          "choices": [
            "false",
            "true"
          ],
          "default": "false",
          "description": "Log the raw requests sent to the X API. Verbose; the output can contain request details, so keep it off outside debugging."
        },
        {
          "name": "POSTS_MAX_QUERIES",
          "format": "number",
          "default": "5",
          "description": "Queries accepted in one x_posts_search or x_posts_count call."
        },
        {
          "name": "POSTS_MAX_USERNAMES",
          "format": "number",
          "default": "5",
          "description": "Usernames accepted in one x_posts_by_user call."
        },
        {
          "name": "POSTS_MAX_IDS",
          "format": "number",
          "default": "100",
          "description": "Post ids accepted in one x_posts_lookup call. The X API caps this at 100."
        },
        {
          "name": "POSTS_DEFAULT_RESULTS",
          "format": "number",
          "default": "10",
          "description": "Posts returned per query when the call does not ask for a count. Every post returned is billed."
        },
        {
          "name": "POSTS_MAX_RESULTS",
          "format": "number",
          "default": "100",
          "description": "Upper bound for posts per query. The X API caps this at 100."
        },
        {
          "name": "POSTS_DEFAULT_DAYS",
          "format": "number",
          "default": "7",
          "description": "How far back post searches look when the call does not say, in days."
        },
        {
          "name": "POSTS_MAX_DAYS",
          "format": "number",
          "default": "7",
          "description": "Furthest back a post search may look, in days. Recent search cannot exceed 7."
        },
        {
          "name": "POSTS_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "15000",
          "description": "Timeout for a posts call in milliseconds when the call does not request one."
        },
        {
          "name": "POSTS_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "2000",
          "description": "Lowest timeout a posts call may request, in milliseconds."
        },
        {
          "name": "POSTS_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "60000",
          "description": "Highest timeout a posts call may request, in milliseconds."
        },
        {
          "name": "USERS_MAX_USERNAMES",
          "format": "number",
          "default": "100",
          "description": "Usernames accepted in one x_users_lookup call. The X API caps this at 100."
        },
        {
          "name": "USERS_MAX_IDS",
          "format": "number",
          "default": "100",
          "description": "User ids accepted in one x_users_lookup call. The X API caps this at 100."
        },
        {
          "name": "USERS_DEFAULT_RESULTS",
          "format": "number",
          "default": "100",
          "description": "Users returned per page when the call does not ask for a count."
        },
        {
          "name": "USERS_MAX_RESULTS",
          "format": "number",
          "default": "1000",
          "description": "Upper bound for users per page."
        },
        {
          "name": "USERS_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "15000",
          "description": "Timeout for a users call in milliseconds when the call does not request one."
        },
        {
          "name": "USERS_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "2000",
          "description": "Lowest timeout a users call may request, in milliseconds."
        },
        {
          "name": "USERS_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "60000",
          "description": "Highest timeout a users call may request, in milliseconds."
        },
        {
          "name": "LISTS_DEFAULT_RESULTS",
          "format": "number",
          "default": "25",
          "description": "Items returned per list page when the call does not ask for a count."
        },
        {
          "name": "LISTS_MAX_RESULTS",
          "format": "number",
          "default": "100",
          "description": "Upper bound for items per list page. The X API caps this at 100."
        },
        {
          "name": "LISTS_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "15000",
          "description": "Timeout for a lists call in milliseconds when the call does not request one."
        },
        {
          "name": "LISTS_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "2000",
          "description": "Lowest timeout a lists call may request, in milliseconds."
        },
        {
          "name": "LISTS_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "60000",
          "description": "Highest timeout a lists call may request, in milliseconds."
        },
        {
          "name": "MEDIA_CHUNK_BYTES",
          "format": "number",
          "default": "4194304",
          "description": "Bytes per upload segment. The X APPEND endpoint caps a segment at 5 MB."
        },
        {
          "name": "MEDIA_POLL_INTERVAL_MS",
          "format": "number",
          "default": "2000",
          "description": "How often the upload status is polled while X transcodes a video, in milliseconds."
        },
        {
          "name": "MEDIA_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "120000",
          "description": "Timeout for a whole upload in milliseconds when the call does not request one."
        },
        {
          "name": "MEDIA_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "5000",
          "description": "Lowest timeout an upload may request, in milliseconds."
        },
        {
          "name": "MEDIA_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "600000",
          "description": "Highest timeout an upload may request, in milliseconds."
        }
      ]
    },
    {
      "version": "0.1.1",
      "transport": {
        "type": "stdio"
      },
      "fileSha256": "d67810d11ea472c17c7936e75bcda52a11f5b519bce2cd324e162eddbe3cc53c",
      "identifier": "https://github.com/Role1776/mcp-x/releases/download/v0.1.1/mcp-x_0.1.1_windows_arm64.mcpb",
      "registryType": "mcpb",
      "environmentVariables": [
        {
          "name": "X_API_KEY",
          "isSecret": true,
          "isRequired": true,
          "description": "OAuth 1.0a consumer key. developer.x.com -> your project -> your app -> Keys and tokens."
        },
        {
          "name": "X_API_KEY_SECRET",
          "isSecret": true,
          "isRequired": true,
          "description": "OAuth 1.0a consumer secret, issued together with X_API_KEY."
        },
        {
          "name": "X_ACCESS_TOKEN",
          "isSecret": true,
          "isRequired": true,
          "description": "User access token. Set the app permissions to Read and Write BEFORE generating it: a token keeps the permissions it was created with, and a read-only one fails every write until it is regenerated."
        },
        {
          "name": "X_ACCESS_TOKEN_SECRET",
          "isSecret": true,
          "isRequired": true,
          "description": "User access token secret, issued together with X_ACCESS_TOKEN."
        },
        {
          "name": "MEDIA_ROOT",
          "format": "filepath",
          "isRequired": true,
          "description": "Absolute path to an existing directory - the only one x_media_upload may read files from. Anything outside it is refused, symlinks included. Checked at startup.",
          "placeholder": "/tmp/mcp-x-media"
        },
        {
          "name": "MCP_TRANSPORT",
          "choices": [
            "stdio",
            "http"
          ],
          "default": "stdio",
          "description": "stdio (client spawns the process) or http (streamable HTTP listener)."
        },
        {
          "name": "MCP_NAME",
          "default": "mcp-x",
          "description": "Server name reported in the MCP initialize handshake."
        },
        {
          "name": "MCP_PATH",
          "default": "/mcp",
          "description": "HTTP path the MCP endpoint is served on. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "SERVER_PORT",
          "default": "8080",
          "description": "TCP port to listen on. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "SERVER_READ_TIMEOUT",
          "default": "60s",
          "description": "HTTP read timeout as a Go duration. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "SERVER_WRITE_TIMEOUT",
          "default": "60s",
          "description": "HTTP write timeout as a Go duration. Used only when MCP_TRANSPORT=http."
        },
        {
          "name": "LOG_MODE",
          "choices": [
            "local",
            "prod"
          ],
          "default": "local",
          "description": "local (text, debug) or prod (JSON, info). Logs go to stderr."
        },
        {
          "name": "MAX_IDLE_CONNS_PER_HOST",
          "format": "number",
          "default": "100",
          "description": "Idle connections the outbound HTTP client keeps per host."
        },
        {
          "name": "X_DEBUG",
          "format": "boolean",
          "choices": [
            "false",
            "true"
          ],
          "default": "false",
          "description": "Log the raw requests sent to the X API. Verbose; the output can contain request details, so keep it off outside debugging."
        },
        {
          "name": "POSTS_MAX_QUERIES",
          "format": "number",
          "default": "5",
          "description": "Queries accepted in one x_posts_search or x_posts_count call."
        },
        {
          "name": "POSTS_MAX_USERNAMES",
          "format": "number",
          "default": "5",
          "description": "Usernames accepted in one x_posts_by_user call."
        },
        {
          "name": "POSTS_MAX_IDS",
          "format": "number",
          "default": "100",
          "description": "Post ids accepted in one x_posts_lookup call. The X API caps this at 100."
        },
        {
          "name": "POSTS_DEFAULT_RESULTS",
          "format": "number",
          "default": "10",
          "description": "Posts returned per query when the call does not ask for a count. Every post returned is billed."
        },
        {
          "name": "POSTS_MAX_RESULTS",
          "format": "number",
          "default": "100",
          "description": "Upper bound for posts per query. The X API caps this at 100."
        },
        {
          "name": "POSTS_DEFAULT_DAYS",
          "format": "number",
          "default": "7",
          "description": "How far back post searches look when the call does not say, in days."
        },
        {
          "name": "POSTS_MAX_DAYS",
          "format": "number",
          "default": "7",
          "description": "Furthest back a post search may look, in days. Recent search cannot exceed 7."
        },
        {
          "name": "POSTS_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "15000",
          "description": "Timeout for a posts call in milliseconds when the call does not request one."
        },
        {
          "name": "POSTS_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "2000",
          "description": "Lowest timeout a posts call may request, in milliseconds."
        },
        {
          "name": "POSTS_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "60000",
          "description": "Highest timeout a posts call may request, in milliseconds."
        },
        {
          "name": "USERS_MAX_USERNAMES",
          "format": "number",
          "default": "100",
          "description": "Usernames accepted in one x_users_lookup call. The X API caps this at 100."
        },
        {
          "name": "USERS_MAX_IDS",
          "format": "number",
          "default": "100",
          "description": "User ids accepted in one x_users_lookup call. The X API caps this at 100."
        },
        {
          "name": "USERS_DEFAULT_RESULTS",
          "format": "number",
          "default": "100",
          "description": "Users returned per page when the call does not ask for a count."
        },
        {
          "name": "USERS_MAX_RESULTS",
          "format": "number",
          "default": "1000",
          "description": "Upper bound for users per page."
        },
        {
          "name": "USERS_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "15000",
          "description": "Timeout for a users call in milliseconds when the call does not request one."
        },
        {
          "name": "USERS_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "2000",
          "description": "Lowest timeout a users call may request, in milliseconds."
        },
        {
          "name": "USERS_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "60000",
          "description": "Highest timeout a users call may request, in milliseconds."
        },
        {
          "name": "LISTS_DEFAULT_RESULTS",
          "format": "number",
          "default": "25",
          "description": "Items returned per list page when the call does not ask for a count."
        },
        {
          "name": "LISTS_MAX_RESULTS",
          "format": "number",
          "default": "100",
          "description": "Upper bound for items per list page. The X API caps this at 100."
        },
        {
          "name": "LISTS_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "15000",
          "description": "Timeout for a lists call in milliseconds when the call does not request one."
        },
        {
          "name": "LISTS_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "2000",
          "description": "Lowest timeout a lists call may request, in milliseconds."
        },
        {
          "name": "LISTS_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "60000",
          "description": "Highest timeout a lists call may request, in milliseconds."
        },
        {
          "name": "MEDIA_CHUNK_BYTES",
          "format": "number",
          "default": "4194304",
          "description": "Bytes per upload segment. The X APPEND endpoint caps a segment at 5 MB."
        },
        {
          "name": "MEDIA_POLL_INTERVAL_MS",
          "format": "number",
          "default": "2000",
          "description": "How often the upload status is polled while X transcodes a video, in milliseconds."
        },
        {
          "name": "MEDIA_DEFAULT_TIMEOUT_MS",
          "format": "number",
          "default": "120000",
          "description": "Timeout for a whole upload in milliseconds when the call does not request one."
        },
        {
          "name": "MEDIA_MIN_TIMEOUT_MS",
          "format": "number",
          "default": "5000",
          "description": "Lowest timeout an upload may request, in milliseconds."
        },
        {
          "name": "MEDIA_MAX_TIMEOUT_MS",
          "format": "number",
          "default": "600000",
          "description": "Highest timeout an upload may request, in milliseconds."
        }
      ]
    }
  ],
  "repository": {
    "url": "https://github.com/Role1776/mcp-x",
    "source": "github"
  },
  "websiteUrl": "https://github.com/Role1776/mcp-x#readme",
  "description": "Search, read and publish X posts and manage users, lists and media via the X API v2."
}