Skip to content

TypeScript Strands Agent to Relational Database

The connection generator wires a TypeScript Strands Agent to a Relational Database project, making a Prisma client available inside your agent factory.

Before using this generator, ensure you have:

  1. A ts#strands-agent project
  2. A ts#rdb project
  1. Install the Nx Console VSCode Plugin if you haven't already
  2. Open the Nx Console in VSCode
  3. Click Generate (UI) in the "Common Nx Commands" section
  4. Search for @aws/nx-plugin - connection
  5. Fill in the required parameters
    • Click Generate

    Select your Strands Agent project as the source and your relational database project as the target. If the project contains multiple agent components, specify sourceComponent to disambiguate.

    Parameter Type Default Description
    sourceProject Required string - The source project
    targetProject Required string - The target project to connect to
    sourceComponent string - The source component to connect from (component name, path relative to source project root, or generator id). Use '.' to explicitly select the project as the source.
    targetComponent string - The target component to connect to (component name, path relative to target project root, or generator id). Use '.' to explicitly select the project as the target.

    The generator modifies a single file:

    • Directorypackages/my-service/src/my-agent
      • agent.ts Prisma client fetched inside getAgent and available to tools

    Additionally, the agent’s <agent-name>-serve-local target is updated to depend on the database’s serve-local target.

    The Prisma client is instantiated inside getAgent(). Since the ts#strands-agent generator configures a single Agent per session, the client is also reused for the lifetime of the session.

    getAgent is updated to import and call the Prisma getter at the top of its body:

    packages/my-service/src/my-agent/agent.ts
    import { getPrisma as getMyDb } from ':my-scope/my-db';
    export const getAgent = async () => {
    const myDb = await getMyDb();
    // ...
    return new Agent({ /* use myDb in tools */ });
    };

    Running the generator again with a different target adds the second database alongside the first:

    packages/my-service/src/my-agent/agent.ts
    import { getPrisma as getMyDb } from ':my-scope/my-db';
    import { getPrisma as getOtherDb } from ':my-scope/other-db';
    export const getAgent = async () => {
    const myDb = await getMyDb();
    const otherDb = await getOtherDb();
    // ...
    return new Agent({ /* use both clients in tools */ });
    };

    The generated agent construct implements IGrantable and IConnectable, so you can grant network and IAM access to the database directly on the construct.

    packages/infra/src/stacks/application-stack.ts
    import { MyDatabase } from ':my-scope/common-constructs';
    const db = new MyDatabase(this, 'Db', { vpc, ... });
    const myAgent = new MyAgent(this, 'MyAgent', { vpc, ... });
    db.allowDefaultPortFrom(myAgent);
    db.grantConnect(myAgent);

    allowDefaultPortFrom opens the security group rule so the agent runtime can reach the database port. grantConnect grants IAM rds-db:connect permission to the agent’s execution role.

    Terminal window
    pnpm nx <agent-name>-serve-local <project-name>

    This starts the agent and all connected databases. The SERVE_LOCAL=true environment variable causes each Prisma client to connect to its local Docker database instead of Aurora.