In the docs

Your own tools

On Business: a tool of your own joins the memory with a key and takes research or building from @alwen.

On Business, a tool or agent your company runs can use the same memory as everyone's apps, and take work from @alwen. Add it on Tools in Alwen, under Your own tools: give it a name, tick what it does (research, building or both), and copy its key. It's shown once.

Connect
POST https://api.alwen.ai/mcp
Authorization: Bearer alwen_…
Content-Type: application/json

It speaks MCP like any connected app (see MCP tools), and what it saves is signed with its name. When someone asks @alwen for work it can do, Alwen may hand it over; say its name in the request (“ask Acme Bot to research…”) to choose it.

Taking the work

Your tool calls next_task and gets the task waiting for it: research with the question, or a build with a brief from the memory (the request, the research, the user's rules and the project). It does the work, then calls task_done with the task id and the findings, or the pull request link for a build. The chat it was asked in hears back, and the user says “ship” when the pull request is ready. Other tools never get your tool's tasks.

Being woken up

Give it a wake-up address (https, on its public address) and Alwen calls it the moment there's work, so it doesn't have to keep asking. The call only says there is a task; the task itself comes from next_task. Each call is signed with the tool's secret, shown once when you add the address:

The call
POST https://your-tool.example.com/alwen
Content-Type: application/json
X-Alwen-Signature: sha256=<HMAC-SHA256 of the body, with the secret, in hex>

{"event":"task","task_id":"2011aa26","kind":"build","request":"…","asked_by":"@maya","mcp":"https://api.alwen.ai/mcp"}
Checking it (Node)
import { createHmac, timingSafeEqual } from "node:crypto";

const want = "sha256=" + createHmac("sha256", process.env.ALWEN_SECRET).update(rawBody).digest("hex");
const ok = want.length === signature.length && timingSafeEqual(Buffer.from(want), Buffer.from(signature));

On a smaller plan your own tools pause: they stay connected, and each call says why. Remove one on Tools and its key stops working at once.