{
  "manifest_version": "1.0.0",
  "template": {
    "id": "a4557650-25e5-4240-b713-d4c2ae274593",
    "slug": "C__ceE",
    "name": "letta-discord-bot",
    "description": "An example Discord chatbot built on the Letta API",
    "url": "https://railway.com/deploy/C__ceE",
    "upstream": {
      "repo_url": "https://github.com/letta-ai/letta-discord-bot-example"
    }
  },
  "status": "unvalidated",
  "validated_at": null,
  "success_rate_30d": null,
  "services": [
    {
      "name": "letta-discord-bot-example",
      "source": {
        "repo": "https://github.com/letta-ai/letta-discord-bot-example"
      },
      "needs_volume": false,
      "http": true
    }
  ],
  "required_inputs": [
    {
      "key": "PORT",
      "service": "letta-discord-bot-example",
      "description": "The port that the Discord bot will run on",
      "secret": false,
      "strategy": "default",
      "default": "3001"
    },
    {
      "key": "APP_ID",
      "service": "letta-discord-bot-example",
      "description": "Your Discord application ID",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "PUBLIC_KEY",
      "service": "letta-discord-bot-example",
      "description": "Your Discord public key",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "ENABLE_TIMER",
      "service": "letta-discord-bot-example",
      "description": "Enable or disable the timer feature (will randomly trigger an agent input/event at a certain interval, defaults to true)",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "DISCORD_TOKEN",
      "service": "letta-discord-bot-example",
      "description": "Your Discord bot token",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "LETTA_API_KEY",
      "service": "letta-discord-bot-example",
      "description": "Your Letta Cloud API key (https://app.letta.com/api-keys). If self-hosting, this is your Letta server password if using a self-hosted server (can use a dummy value if you did not set a server password).",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "LETTA_AGENT_ID",
      "service": "letta-discord-bot-example",
      "description": "The ID of your Letta agent that will drive the Discord chatbot. You need to have created this agent already on your Letta server.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "RESPOND_TO_DMS",
      "service": "letta-discord-bot-example",
      "description": "If true, the bot will respond to DMs. If false, the bot will ignore them.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "RESPOND_TO_BOTS",
      "service": "letta-discord-bot-example",
      "description": "Whether or not to respond to other bots",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "FIRING_PROBABILITY",
      "service": "letta-discord-bot-example",
      "description": "Probability of the timer firing (0.0 to 1.0), defaults to 0.1 (10%)",
      "secret": false,
      "strategy": "default",
      "default": "0.1"
    },
    {
      "key": "RESPOND_TO_GENERIC",
      "service": "letta-discord-bot-example",
      "description": "Whether or not to respond to generic messages (messages that are not mentions)",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "RESPOND_TO_MENTIONS",
      "service": "letta-discord-bot-example",
      "description": "Whether or not to respond to mentions",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "TIMER_INTERVAL_MINUTES",
      "service": "letta-discord-bot-example",
      "description": "Maximum interval range in minutes for the random timer (defaults to every 15 minutes)",
      "secret": false,
      "strategy": "default",
      "default": "15"
    },
    {
      "key": "LETTA_USE_SENDER_PREFIX",
      "service": "letta-discord-bot-example",
      "description": "Provide a value for LETTA_USE_SENDER_PREFIX.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "C__ceE"
      }
    },
    "cli": "railway deploy --template C__ceE",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "a4557650-25e5-4240-b713-d4c2ae274593",
            "serializedConfig": {
              "services": {
                "553e129d-a4b8-4c5f-aa1b-70bf51055788": {
                  "name": "letta-discord-bot-example",
                  "deploy": {
                    "startCommand": "npm start",
                    "preDeployCommand": "npm install"
                  },
                  "source": {
                    "repo": "letta-ai/letta-discord-bot-example",
                    "branch": null,
                    "rootDirectory": null
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "The port that the Discord bot will run on",
                      "defaultValue": "3001"
                    },
                    "APP_ID": {
                      "isOptional": false,
                      "description": "Your Discord application ID",
                      "defaultValue": "{{APP_ID}}"
                    },
                    "PUBLIC_KEY": {
                      "isOptional": false,
                      "description": "Your Discord public key",
                      "defaultValue": "{{PUBLIC_KEY}}"
                    },
                    "ENABLE_TIMER": {
                      "isOptional": true,
                      "description": "Enable or disable the timer feature (will randomly trigger an agent input/event at a certain interval, defaults to true)",
                      "defaultValue": "true"
                    },
                    "DISCORD_TOKEN": {
                      "isOptional": false,
                      "description": "Your Discord bot token",
                      "defaultValue": "{{DISCORD_TOKEN}}"
                    },
                    "LETTA_API_KEY": {
                      "isOptional": false,
                      "description": "Your Letta Cloud API key (https://app.letta.com/api-keys). If self-hosting, this is your Letta server password if using a self-hosted server (can use a dummy value if you did not set a server password).",
                      "defaultValue": "{{LETTA_API_KEY}}"
                    },
                    "LETTA_AGENT_ID": {
                      "isOptional": false,
                      "description": "The ID of your Letta agent that will drive the Discord chatbot. You need to have created this agent already on your Letta server.",
                      "defaultValue": "{{LETTA_AGENT_ID}}"
                    },
                    "LETTA_BASE_URL": {
                      "isOptional": true,
                      "description": "The IP address of your Letta server (if self-hosting). Use https://api.letta.com if using Letta Cloud.",
                      "defaultValue": ""
                    },
                    "RESPOND_TO_DMS": {
                      "isOptional": true,
                      "description": "If true, the bot will respond to DMs. If false, the bot will ignore them.",
                      "defaultValue": "false"
                    },
                    "RESPOND_TO_BOTS": {
                      "isOptional": true,
                      "description": "Whether or not to respond to other bots",
                      "defaultValue": "false"
                    },
                    "DISCORD_CHANNEL_ID": {
                      "isOptional": true,
                      "description": "Set this if you want the bot to only respond to messages (listen) in a specific channel",
                      "defaultValue": ""
                    },
                    "FIRING_PROBABILITY": {
                      "isOptional": true,
                      "description": "Probability of the timer firing (0.0 to 1.0), defaults to 0.1 (10%)",
                      "defaultValue": "0.1"
                    },
                    "RESPOND_TO_GENERIC": {
                      "isOptional": true,
                      "description": "Whether or not to respond to generic messages (messages that are not mentions)",
                      "defaultValue": "false"
                    },
                    "RESPOND_TO_MENTIONS": {
                      "isOptional": true,
                      "description": "Whether or not to respond to mentions",
                      "defaultValue": "true"
                    },
                    "TIMER_INTERVAL_MINUTES": {
                      "isOptional": true,
                      "description": "Maximum interval range in minutes for the random timer (defaults to every 15 minutes)",
                      "defaultValue": "15"
                    },
                    "LETTA_USE_SENDER_PREFIX": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "true"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>": {}
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 1,
    "needs_volume": false
  },
  "generated_at": "2026-09-22T04:14:41.730Z",
  "generator_version": "0.1.0"
}
