/**
* Integration tests - run with MCP_AWS_DRY_RUN=true for no-AWS tests.
*/
import { describe, it, expect, beforeAll, afterAll } from "vitest";
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
import path from "path";
import { fileURLToPath } from "url";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
describe("MCP Server Integration", () => {
let client: Client;
let transport: StdioClientTransport;
beforeAll(async () => {
transport = new StdioClientTransport({
command: "node",
args: [path.join(__dirname, "..", "dist", "index.js")],
env: {
...Object.fromEntries(
Object.entries(process.env).filter(
(e): e is [string, string] => e[1] !== undefined
)
),
MCP_DRY_RUN: "true",
},
});
client = new Client(
{ name: "test-client", version: "1.0.0" },
{ capabilities: {} }
);
await client.connect(transport);
});
afterAll(() => {
client.close();
});
it("lists tools", async () => {
const tools = await client.listTools();
expect(tools.tools.length).toBeGreaterThan(60);
expect(
tools.tools.some((t) => t.name === "get_aws_caller_identity")
).toBe(true);
expect(tools.tools.some((t) => t.name === "aws_health_check")).toBe(
true
);
});
it("calls get_aws_caller_identity in dry-run", async () => {
const result = await client.callTool({
name: "get_aws_caller_identity",
arguments: {},
});
expect(result.content).toBeDefined();
const text = (result.content as { type: string; text: string }[])
.filter((c) => c.type === "text")
.map((c) => c.text)
.join("");
const parsed = JSON.parse(text);
expect(parsed.Account).toBe("123456789012");
});
it("calls estimate_cost", async () => {
const result = await client.callTool({
name: "estimate_cost",
arguments: { service: "ec2", quantity: 1, unit: "t3.micro" },
});
expect(result.isError).not.toBe(true);
const content = Array.isArray(result.content) ? result.content : [];
const text = content
.filter((c: { type: string }) => c.type === "text")
.map((c: { text: string }) => c.text)
.join("");
const parsed = JSON.parse(text);
expect(parsed.service || parsed.tool).toBeDefined();
expect(
parsed.estimatedMonthlyUSD || parsed.dryRun !== undefined
).toBeDefined();
});
});