AWS Machine Learning1h agoenergy 123

How ShipStation Global built an AI IT help desk on Amazon Bedrock AgentCore

image: AWS Machine Learning

This post is co-written with Kenneth Salmon, Edward Boswell, Jack Armstrong, Robert Bahn, and Nick Ciubotariu from ShipStation Global. Answering the same IT questions and clearing routine tickets drains time that IT teams could spend elsewhere. To reclaim it, the ShipStation Global Engineering team built Deckhand , an AI-powered IT help desk agent for Slack, on Amazon Bedrock AgentCore . ShipStation Global is the leading intelligent shipping and logistics platform for small and mid-sized shippers, and it operates on a simple belief: the more efficient its teams are, the better it delivers for customers. Deckhand puts that belief to work. It answers routine IT and company questions from a curated knowledge base, reads error-message screenshots, and creates and updates Jira Service Management tickets. In this post, we discuss how ShipStation architected Deckhand, which resulted in resolving 97.5 percent of incoming channel queries while earning a 96 percent positive feedback rating by employees (Figure 1). Figure 1: 3-month channel coverage and positive feedback Business challenge The problem Deckhand solves is the one every IT team will recognize: the same questions are routinely asked, error messages are posted after business hours, and information needs to be gathered from different teams. At ShipStation Global, those conversations lived in a busy help desk Slack channel, where employees asked, and IT answered, one thread at a time. The answers usually already existed in a Confluence how-to article, on a company intranet page, or in a thread from eight months earlier. Finding them was the hard part. The channel data made the scale concrete. In the 12 months before launch: Employees posted more than 1,500 threads, and volume kept growing. With employees in the US, UK, Spain, Poland, Australia, and the Philippines, more than a fifth of questions arrived outside US business hours. Answers were split across different places: Confluence articles, intranet pages and PDFs, IT-maintained guides, and the channel’s own history. Repetitive questions consumed time that structured self-service steps could have handled. “We created Deckhand because getting help should be as simple as asking a question in Slack, not deciphering a ticket form or sending an email into the void. We believe that tickets are an indication of operational friction not productivity. Deckhand resolves common questions on the spot and, when it can’t, converts the conversation into a fully contextualized ticket with one click, improving the employee experience and freeing our team from endlessly repeating the phrase: ‘Please file a ticket.’” — Chris Collins, Senior Director IT at ShipStation Global Solution overview Deckhand works in Slack like any teammate—joining channels, reading the conversation, and drawing context from Slack profiles to answer IT questions in place. We run it on Amazon Bedrock AgentCore, a platform to build, connect, and optimize agents at scale, with any framework or model. AgentCore runtime, a capability of Amazon Bedrock AgentCore, hosts the agent in isolated sessions, so we run no servers or containers. The solution has four main components, shown in Figure 2: Slack service: A FastAPI and Slack Bolt application, hosted on AWS App Runner . It receives Slack events, decides whether the bot should respond, and builds a user-context payload from the requester’s Slack profile, including name, email, time zone, and manager. Agent service: A Strands agent, deployed as a container on Amazon Bedrock AgentCore runtime , manages the multi-turn tool agent loop using Anthropic’s Claude in Amazon Bedrock . Tools and knowledge: A single AWS Lambda function, exposed as Model Context Protocol (MCP) tools through AgentCore Gateway , a capability of Amazon Bedrock AgentCore, classifies requests, creates and updates Jira tickets, and analyzes images. An Amazon Bedrock knowledge base indexes content from Confluence, the company intranet, Slack, and marketing pages, storing it in Amazon Simple Storage Service (Amazon S3) . Operations and feedback. Amazon DynamoDB stores feedback, AWS X-Ray traces request paths using OpenTelemetry, and the services log to Amazon CloudWatch . Figure 2: Architecture diagram showing Slack events entering the Slack service and Amazon Bedrock AgentCore runtime, with separate paths to an Amazon Bedrock knowledge base, AgentCore Gateway-backed Lambda tools, Jira Service Management, and DynamoDB feedback. When an employee posts in a channel where Deckhand is a member, the Slack service assembles the full thread history and user context. It then invokes the agent through the AgentCore runtime API. The agent searches the knowledge base and calls tools as needed. When it finds an answer, it returns a final response (Figure 3). When it doesn’t, it asks a clarifying question or offers to create a ticket (Figure 4). Figure 3: Deckhand responds with self-service steps Figure 4: Deckhand offers to create a ticket Deckhand workflow This section walks through how Deckhand is implemented, from prerequisites to a working deployment. Prerequisites To implement this pattern, you need the following: An AWS account with access to Amazon Bedrock, AgentCore runtime, and AgentCore Gateway. A Slack app with event subscriptions, a signing secret, and a bot token scoped to your use case. A container image registry such as Amazon Elastic Container Registry (Amazon ECR). An Amazon S3 bucket and an Amazon Bedrock knowledge base. AWS Identity and Access Management (IAM) roles scoped to each runtime and tool, and AWS Secrets Manager entries for third-party credentials. Building the agent with Strands Agents and AgentCore The agent is intentionally lightweight. Using the open source Strands Agents SDK , an agent consists of a model, a set of tools, and a system prompt. The SDK manages the reasoning loop, allowing the model to select tools, process results, and iterate until it produces an answer. Deckhand’s agent service is implemented in a few lines of Python. from strands import Agent from strands.models import BedrockModel from strands.tools.mcp import MCPClient from strands_tools import retrieve from mcp.client.streamable_http import streamablehttp_client model = BedrockModel( model_id=MODEL_ID, max_tokens=2048, temperature=0.3, ) gateway = MCPClient(lambda: streamablehttp_client(url=GATEWAY_URL)) agent = Agent( model=model, tools=[gateway, retrieve], system_prompt=SYSTEM_PROMPT, ) The model ID is set through an environment variable, which allows switching models without modifying application code. Tools are integrated with the agent in two ways. Amazon Bedrock Knowledge Bases retrieval is a native Strands tool that supports knowledge base search with a single import. Other functions, including classification, ticket management, user resolution, and image analysis, are handled by a Lambda function registered on AgentCore Gateway. The Gateway exposes these as MCP tools, and the Lambda routes each invocation by tool name. This separation allows tool logic to be updated independently, and the agent can access new tools from the Gateway without requiring a rebuild. AgentCore runtime hosts the agent as a container, avoiding the need for server or session management. The Slack service calls the agent synchronously for each message, providing the thread transcript and user context, and posts the final response. Since context, including the employee’s profile, is included with every request, the agent can complete ticket details automatically. Knowledge base design and answer routing Deckhand answers from a single Amazon Bedrock knowledge base with core S3-backed data sources: Articles synced from Confluence. Internal pages, PDFs, and events synced from the company intranet. Resolved support threads mined from Slack (covered in the next section). Each document includes metadata such as title, source URL, content type, and event dates. This allows the agent to filter content, for example, whe

read the original at AWS Machine Learning →