MCP Fusion/Integrations and federation/AWS connectors
AWS connectors
Expose tagged AWS Lambda functions and Step Functions as MCP tools with typed adapters, deterministic discovery and MVA interception around the payload.
AWS is often where the real business logic already runs. MCP Fusion's AWS package gives an agent a typed MCP surface over Lambda functions and Step Functions, while keeping discovery, annotations and response shaping in one connector boundary.
Lambda discovery
import { LambdaClient } from '@aws-sdk/client-lambda';
import { createAwsConnector, createLambdaAdapter } from '@mcpfusion/aws';
const aws = await createAwsConnector({
lambdaClient: await createLambdaAdapter(
new LambdaClient({ region: 'us-east-1' }),
),
pollInterval: 60_000,
onChange: () => server.notification({
method: 'notifications/tools/list_changed',
}),
});
for (const tool of aws.tools()) {
registry.register(defineTool(tool.name, tool.config));
}The verified connector config accepts an optional Lambda client, Step Functions client, tag filter, enableLambda (default true), enableStepFunctions (default false), pollInterval, onChange and onError. Discovery is deliberately opt-in by tag: the default filter requires mcp:expose=true.
Tags are the AWS allowlist
The package defines tag keys for exposure, group, action, read-only, destructive behavior and Step Functions type:
| Tag | Meaning |
|---|---|
mcp:expose=true | eligible for discovery |
mcp:group | MCP namespace |
mcp:action | action name inside the namespace |
mcp:readOnly | read-only annotation |
mcp:destructive | destructive annotation |
mcp:sfn-type | Step Functions execution mode |
LambdaDiscovery and StepFunctionDiscovery produce summaries, then synthesizeLambdaTools and synthesizeStepFunctionTools produce tool configurations. synthesizeAll combines the discovered set, and toToolName gives it a stable MCP name.
Manual AWS tools
Discovery is not the only path. For a critical function with a contract that should not change when tags change, define it directly:
import { defineAwsTool } from '@mcpfusion/aws';
const charge = defineAwsTool({
name: 'payments.charge',
arn: 'arn:aws:lambda:us-east-1:123:function:charge',
description: 'Charge an approved payment',
annotations: {
readOnlyHint: false,
destructiveHint: true,
},
});The manual config requires the ARN and accepts a description and MCP annotations. The returned config still needs the normal registry, Presenter and middleware composition.
Step Functions
Set enableStepFunctions: true and provide the Step Functions client. The adapter exposes synchronous or asynchronous execution according to the discovered mcp:sfn-type tag. The MVA boundary intercepts the AWS payload before it becomes model-visible: the generated action can attach a Presenter and redact fields just like a handwritten tool.
AWS credentials and tenant boundaries
The AWS package does not decide your IAM policy or tenant mapping. Create the client with the credentials and region your deployment is allowed to use, resolve tenant identity in contextFactory, and keep account-specific identifiers out of model-controlled arguments. If the function needs a buyer-provided vendor key, use BYOC credentials, not a field in the tool schema.
The README contains older examples using non-exported discovery names. The source barrel is authoritative: use createAwsConnector, defineAwsTool, the adapters, discovery classes and synthesis functions listed above.
Next steps
- Authentication: protect AWS-backed tools
- Generators: generate from OpenAPI and Prisma
- Contracts: lock discovered capabilities before deploy
