Integration of Anthropic Claude Agent SDK for Building AI Agents
Let's be direct: when a client comes with a task to build an agent that doesn't just answer questions but performs actions—searching databases, creating tickets, working with files—we know that the Anthropic Claude Agent SDK removes 80% of the grunt work. But incorrect integration leads to context loss and hallucinations. Here's how we configure the SDK to make the agent reliable in production. Our team has 5+ years of experience in NLP and LLMs, with over 20 projects using the Claude Agent SDK. We guarantee stable agent operation in your infrastructure.
Problems We Solve
-
Context drift in multi-turn dialogs: Without proper session management, the agent forgets previous interactions, causing repetitive questions or incorrect actions. The SDK's built-in
ConversationSessionhandles this automatically. -
Tool integration complexity: Manually wrapping each API call with error handling, retries, and parsing is error-prone and time-consuming. The
@tooldecorator streamlines this. -
Lack of human oversight for critical operations: Destructive actions like deleting orders or processing refunds need approval. The SDK's
ToolApprovalPolicyprovides a clean interface for human-in-the-loop.
How We Do It: Technical Details
We start by installing the SDK and defining tools via decorators. Below is a typical template we use.
# pip install anthropic claude-agent-sdk import anthropic from claude_agent_sdk import Agent, AgentConfig, tool client = anthropic.Anthropic() @tool def search_database(query: str, table: str = "products") -> str: """Search the company database. Args: query: Search query table: Table to search (products, orders, customers) """ results = db.search(query=query, table=table, limit=10) return results.to_json() @tool def create_support_ticket( customer_id: str, subject: str, description: str, priority: str = "normal", ) -> str: """Create a support ticket. Args: customer_id: Customer ID subject: Ticket subject description: Detailed description priority: Priority (low, normal, high, critical) """ ticket = helpdesk.create_ticket( customer_id=customer_id, subject=subject, description=description, priority=priority, ) return f"Ticket #{ticket['id']} created. URL: {ticket['url']}" config = AgentConfig( model="claude-opus-4-5", system_prompt="""You are a customer support agent for TechCorp. Help customers solve problems using available tools. Always verify data through tools—do not rely on memory.""", max_turns=10, ) agent = Agent( client=client, config=config, tools=[search_database, create_support_ticket], ) result = agent.run( messages=[{"role": "user", "content": "Customer ID 12345 has a problem with order #99876"}] ) print(result.final_message) For real-time interactions, we use streaming via astream.
import asyncio async def run_agent_with_streaming(): async for event in agent.astream( messages=[{"role": "user", "content": "Analyze the last 10 orders for customer ID 12345"}] ): match event.type: case "text_delta": print(event.text, end="", flush=True) case "tool_use_start": print(f"\n[Tool: {event.tool_name}]") case "tool_result": print(f"[Result received, {len(event.content)} chars]") case "agent_turn_complete": print(f"\n[Completed in {event.turn_count} turns]") asyncio.run(run_agent_with_streaming()) MCP Integration
Model Context Protocol (MCP) allows connecting external servers with tools without explicit coding. We use this for filesystem, database, and GitHub integration.
from claude_agent_sdk import Agent, MCPServerConfig agent_with_mcp = Agent( client=client, config=config, mcp_servers=[ MCPServerConfig( name="filesystem", command="npx", args=["-y", "@modelcontextprotocol/server-filesystem", "/workspace"], ), MCPServerConfig( name="postgres", command="npx", args=["-y", "@modelcontextprotocol/server-postgres"], env={"POSTGRES_URL": "postgresql://user:pass@localhost/db"}, ), MCPServerConfig( name="github", command="npx", args=["-y", "@modelcontextprotocol/server-github"], env={"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_..."}, ), ], ) result = agent_with_mcp.run( messages=[{"role": "user", "content": "Read the file config.yaml and create GitHub Issues from TODO comments"}] ) Multi-Turn Dialog with History
We use ConversationSession to maintain context across turns without manual history management.
from claude_agent_sdk import ConversationSession session = ConversationSession( agent=agent, session_id="customer_session_12345", ) response1 = session.send("What is the status of my order #99876?") response2 = session.send("Can I reschedule delivery for tomorrow?") response3 = session.send("Please confirm") print(session.get_history()) Human-in-the-Loop via Approval
For destructive operations, we require approval. The ToolApprovalPolicy lets us define which tools need confirmation.
from claude_agent_sdk import Agent, ToolApprovalPolicy class CustomApprovalPolicy(ToolApprovalPolicy): REQUIRES_APPROVAL = {"delete_order", "process_refund", "ban_customer"} async def should_approve(self, tool_name: str, tool_input: dict) -> bool: if tool_name not in self.REQUIRES_APPROVAL: return True await notify_operator( message=f"Approval required: {tool_name}\nParameters: {tool_input}", callback_url="/api/approve/{approval_id}", ) approval = await wait_for_approval(timeout=300) return approval.approved agent_with_approval = Agent( client=client, config=config, tools=[search_database, process_refund, ban_customer], approval_policy=CustomApprovalPolicy(), ) Practical Case: Financial Monitoring Agent
Financial monitoring case
**Challenge.** A client in finance had a rule-based system generating 50–200 suspicious transaction flags daily. A compliance officer spent 3 hours manually reviewing them. **Agent tools:** get_flagged_transactions, get_transaction_history, get_customer_profile, check_external_sanctions, create_sar_draft, escalate_to_officer. **Workflow:** The agent receives flags, analyzes context, customer profile, and history, then decides—false positive or suspicious. Critical cases are escalated with a draft SAR. **Results:** 78% of flags processed automatically, officer time reduced to 45 minutes, SAR draft quality rated 4.3/5.0, response time for critical cases dropped from 4–8 hours to 15 minutes. This saved over 3 work hours daily, resulting in significant monthly savings per employee.Comparison: Manual Implementation vs. Claude Agent SDK
| Aspect | Manual Implementation | Claude Agent SDK |
|---|---|---|
| Time to build basic agent | 2–3 weeks | 3–5 days |
| History management | Requires custom code | Built-in |
| Tool integration | Manual API wrapper | @tool decorator |
| MCP support | Not available | Ready configuration |
| Human-in-the-loop | Build from scratch | Approval policy |
Using the SDK cuts agent development time by three times compared to manual implementation. Based on our data, clients achieve substantial annual savings on manual processing.
Common Mistakes and Solutions
| Mistake | Solution |
|---|---|
| Context loss in long dialogs | Use ConversationSession with automatic summarization |
| Hallucinations when using tools | Always verify tool results via system_prompt |
| Delays from blocking API calls | Switch to streaming (astream) and configure timeouts |
| Security of destructive operations | Set up human-in-the-loop via CustomApprovalPolicy |
Process and Timeline
- Architectural design of the agent for your scenario — 1–2 days.
- SDK integration with your infrastructure and tool setup — 3–5 days.
- Connecting MCP servers (files, databases, external APIs) — 1–3 days each.
- Setting up human-in-the-loop and approval flow — 1 week.
- Documentation and team training — 2–3 days.
- Production deployment with monitoring — 1 week.
- Support for 1 month after deployment is included.
Total timeline: 2 to 4 weeks depending on complexity. Exact cost is calculated individually after analyzing your scenario.
What You Get
- A working agent with configured tools and MCP servers.
- Full documentation on architecture and API.
- Access to source code and CI/CD pipeline.
- Team training (2–3 sessions).
- One month of technical support after deployment.
Why Integrate the Claude Agent SDK?
The SDK provides out-of-the-box mechanisms for context management, tools, and security, accelerating production release by three times. According to an internal client survey, ticket processing time decreases by 60%. Contact us to assess your scenario and schedule a consultation for integration.







