Skip to main content
Glama

deployment_logs

Retrieve logs for a specific deployment to debug issues, monitor progress, and check build output in Railway.app infrastructure.

Instructions

[API] Get logs for a specific deployment

⚡️ Best for: ✓ Debugging deployment issues ✓ Monitoring deployment progress ✓ Checking build output

⚠️ Not for: × Service runtime logs × Database logs

→ Prerequisites: deployment_list

→ Next steps: deployment_status

→ Related: service_info, deployment_trigger

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
deploymentIdYesID of the deployment to get logs for
limitNoMaximum number of log entries to fetch

Implementation Reference

  • Handler function that executes the deployment_logs tool logic by calling the deployment service.
    async ({ deploymentId, limit = 100 }) => {
      return deploymentService.getDeploymentLogs(deploymentId, limit);
    }
  • Input schema using Zod for validating parameters of the deployment_logs tool.
    {
      deploymentId: z.string().describe("ID of the deployment to get logs for"),
      limit: z.number().optional().describe("Maximum number of log entries to fetch")
    },
  • Creation of the deployment_logs tool object including name, description, schema, and handler using createTool.
      "deployment_logs",
      formatToolDescription({
        type: 'API',
        description: "Get logs for a specific deployment",
        bestFor: [
          "Debugging deployment issues",
          "Monitoring deployment progress",
          "Checking build output"
        ],
        notFor: [
          "Service runtime logs",
          "Database logs"
        ],
        relations: {
          prerequisites: ["deployment_list"],
          nextSteps: ["deployment_status"],
          related: ["service_info", "deployment_trigger"]
        }
      }),
      {
        deploymentId: z.string().describe("ID of the deployment to get logs for"),
        limit: z.number().optional().describe("Maximum number of log entries to fetch")
      },
      async ({ deploymentId, limit = 100 }) => {
        return deploymentService.getDeploymentLogs(deploymentId, limit);
      }
    ),
  • Registration function that registers all tools, including deploymentTools containing deployment_logs, to the MCP server.
    export function registerAllTools(server: McpServer) {
      // Collect all tools
      const allTools = [
        ...databaseTools,
        ...deploymentTools,
        ...domainTools,
        ...projectTools,
        ...serviceTools,
        ...tcpProxyTools,
        ...variableTools,
        ...configTools,
        ...volumeTools,
        ...templateTools,
      ] as Tool[];
    
      // Register each tool with the server
      allTools.forEach((tool) => {
        server.tool(
          ...tool
        );
      });
    } 
  • Supporting service method that fetches build and deployment logs, formats them, and returns a response. Called by the tool handler.
    async getDeploymentLogs(deploymentId: string, limit: number = 100) {
      try {
        // Wait for 5 seconds before fetching logs
        // Seems like the LLMs like to call this function multiple times in combination
        // with the health check function, so we need to wait a bit to avoid rate limiting
        await new Promise(resolve => setTimeout(resolve, 5000));
        const buildLogs = await this.client.deployments.getBuildLogs(deploymentId, limit);
        const deploymentLogs = await this.client.deployments.getDeploymentLogs(deploymentId, limit);
    
        const logs: DeploymentLog[] = [...buildLogs.map(log => ({ ...log, type: 'build' as const })), ...deploymentLogs.map(log => ({ ...log, type: 'deployment' as const })) ];
    
        if (logs.length === 0) {
          return createSuccessResponse({
            text: `No logs found for deployment ${deploymentId}`,
            data: []
          });
        }
    
        const formattedLogs = logs.map(log => {
          const timestamp = new Date(log.timestamp).toLocaleString();
          const severity = log.severity.toLowerCase();
          const emoji = severity === 'error' ? '❌' : severity === 'warn' ? '⚠️' : '📝';
          return `[${log.type}] [${timestamp}] ${emoji} ${log.message}`;
        }).join('\n');
    
        return createSuccessResponse({
          text: formattedLogs,
          data: logs
        });
      } catch (error) {
        return createErrorResponse(`Error fetching logs: ${formatError(error)}`);
      }
    }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/epitaphe360/railway-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server