Do MÁS
with less

Introducing the MÁS stack:
MCP + Agents + Slack.

Empower your TypeScript agents with almost any MCP server, colocated together on secure managed infrastructure. Talk to your agents through an out-of-the-box Slack app, in your workspace or in your customers'. And interface with your agents from existing services via secure APIs.

Do MÁS
with less

Introducing the MÁS stack:
MCP + Agents + Slack.

Empower your TypeScript agents with almost any MCP server, colocated together on secure managed infrastructure. Talk to your agents through an out-of-the-box Slack app, in your workspace or in your customers'. And interface with your agents from existing services via secure APIs.

Do MÁS
with less

Introducing the MÁS stack:
MCP + Agents + Slack.

Empower your TypeScript agents with almost any MCP server, colocated together on secure managed infrastructure. Talk to your agents through an out-of-the-box Slack app, in your workspace or in your customers'. And interface with your agents from existing services via secure APIs.

Building with the MÁS stack

Here a TypeScript agent is configured to use the Grafana MCP server (written in Golang). Files are synced from Google Drive into the agent's vector store for RAG. And you can talk to the agent using the Slack app provided out-of-the-box.

const gdrive = new GDriveBlobStore(application, { folder: "Documents" });

// Make the Grafana MCP server available for our Assistants
const assistants = new Assistants({
    // Copy this config from your Claude Desktop if you'd like
    mcpServers: {
        grafana: {
            command: "mcp-grafana",
            env: ["GRAFANA_URL", "GRAFANA_API_KEY"],
            repo: "grafana/mcp-grafana",
        },
    },
});

const slackAssistant = new SlackAssistant({
    name: "MASExample",
    // DeepStructure Assistants can use any model from the major providers
    model: "google/gemini-2.5-pro-exp-03-25",
    tools: [{
        type: "function",
        function: {
            name: "query_prometheus",
        },
        // add more tools, workflows, and agents here
    }]
});

// "Reactive events" trigger TypeScript workflows to run in response to changes in GDrive
[ "create", "update" ].forEach((event) => gdrive.on(
    event,
    // Resilient, scalable workflow that looks like regular TypeScript code
    function syncToAssistant(data) {
        const { key } = data;
        // Google Drive is modeled as a BlobStore
        const doc = gdrive.get({ key });
        // Assistant vector_stores are modeled as a BlobStore
        slackAssistant.assistant.blobStore.put({
            key,
            object: doc.object,
            contentType: doc.metadata?.contentType
        });
    })
);
gdrive.on(
    "delete",
    function deleteFromAssistant(data) {
        slackAssistant.assistant.blobStore.delete({ key: data.key });
    }
);

application.setup = async () => await slackAssistant.start();

Expand

const gdrive = new GDriveBlobStore(application, { folder: "Documents" });

// Make the Grafana MCP server available for our Assistants
const assistants = new Assistants({
    // Copy this config from your Claude Desktop if you'd like
    mcpServers: {
        grafana: {
            command: "mcp-grafana",
            env: ["GRAFANA_URL", "GRAFANA_API_KEY"],
            repo: "grafana/mcp-grafana",
        },
    },
});

const slackAssistant = new SlackAssistant({
    name: "MASExample",
    // DeepStructure Assistants can use any model from the major providers
    model: "google/gemini-2.5-pro-exp-03-25",
    tools: [{
        type: "function",
        function: {
            name: "query_prometheus",
        },
        // add more tools, workflows, and agents here
    }]
});

// "Reactive events" trigger TypeScript workflows to run in response to changes in GDrive
[ "create", "update" ].forEach((event) => gdrive.on(
    event,
    // Resilient, scalable workflow that looks like regular TypeScript code
    function syncToAssistant(data) {
        const { key } = data;
        // Google Drive is modeled as a BlobStore
        const doc = gdrive.get({ key });
        // Assistant vector_stores are modeled as a BlobStore
        slackAssistant.assistant.blobStore.put({
            key,
            object: doc.object,
            contentType: doc.metadata?.contentType
        });
    })
);
gdrive.on(
    "delete",
    function deleteFromAssistant(data) {
        slackAssistant.assistant.blobStore.delete({ key: data.key });
    }
);

application.setup = async () => await slackAssistant.start();

Expand

const gdrive = new GDriveBlobStore(application, { folder: "Documents" });

// Make the Grafana MCP server available for our Assistants
const assistants = new Assistants({
    // Copy this config from your Claude Desktop if you'd like
    mcpServers: {
        grafana: {
            command: "mcp-grafana",
            env: ["GRAFANA_URL", "GRAFANA_API_KEY"],
            repo: "grafana/mcp-grafana",
        },
    },
});

const slackAssistant = new SlackAssistant({
    name: "MASExample",
    // DeepStructure Assistants can use any model from the major providers
    model: "google/gemini-2.5-pro-exp-03-25",
    tools: [{
        type: "function",
        function: {
            name: "query_prometheus",
        },
        // add more tools, workflows, and agents here
    }]
});

// "Reactive events" trigger TypeScript workflows to run in response to changes in GDrive
[ "create", "update" ].forEach((event) => gdrive.on(
    event,
    // Resilient, scalable workflow that looks like regular TypeScript code
    function syncToAssistant(data) {
        const { key } = data;
        // Google Drive is modeled as a BlobStore
        const doc = gdrive.get({ key });
        // Assistant vector_stores are modeled as a BlobStore
        slackAssistant.assistant.blobStore.put({
            key,
            object: doc.object,
            contentType: doc.metadata?.contentType
        });
    })
);
gdrive.on(
    "delete",
    function deleteFromAssistant(data) {
        slackAssistant.assistant.blobStore.delete({ key: data.key });
    }
);

application.setup = async () => await slackAssistant.start();

Expand

➡️ Next, authorize GDrive and Slack access for your MÁS stack and deploy it. The DeepStructure platform builds and runs your agent app and MCP servers, colocated together in secure managed infrastructure. MCP servers can target any of the node.js, Python, and Golang runtimes we currently support — like a cross-language "npm" for MCP.

$ ds auth gdrive
# Set required env vars and secrets:
# $ ds env set ...
# $ ds secret set ...
$ ds

➡️ Now the agent and its MCP server are up and running in DeepStructure Cloud. Communicate with your new agent through a variety of interfaces:

  • Out-of-the-box Slack app that you add to your workspace

  • HTTP requests from your existing services

  • Email, Telegram, GitHub, Notion, and other human interfaces you can add on

  • OpenAI Assistants API, via the DeepStructure endpoint:

client = OpenAI(base_url="https://<your-deepstructure-endpoint>/workflows/assistants/api")
assistant = client.beta.assistants.list()[0]
# ask the assistant to do things for you via threads and runs ...

➡️ From here, the DeepStructure platform enables you to start extending your app in a variety of ways:

  • Augment your agents with your own tools implemented as resilient, scalable TypeScript workflows

  • React to events in other data stores, such as S3

  • Monitor and observe all runs and data flows among components of your agents and tools

  • Build evals around the labeled datasets that DeepStructure automatically creates for your agent inputs and outputs

  • Self-host in your own VPC for enterprise data governance

Frequently Asked Questions

FAQ

How are you different from OpenAI?

How are you different from Braintrust, HumanLoop, et al.?

How are you different from Temporal, Inngest, Cloudflare Workflows, et al.?

Can I integrate DeepStructure into my existing application?

Can I use LangChain, LlamaIndex, AI SDK, et al. with DeepStructure?

Is DeepStructure compatible with OpenAI, Anthropic, et al. models?

Is DeepStructure a visual workflow builder?

Does DeepStructure support Python?

Does DeepStructure allow self-hosted deployments of the platform?

Does DeepStructure integrate with my existing APM / observability / BI tooling?

Is DeepStructure open-source?

Do you train models with my application data?

Do you have a Discord or Slack community?

Are you SOC 2, HIPAA, ISO 27001 compliant?

How are you different from OpenAI?

How are you different from Braintrust, HumanLoop, et al.?

How are you different from Temporal, Inngest, Cloudflare Workflows, et al.?

Can I integrate DeepStructure into my existing application?

Can I use LangChain, LlamaIndex, AI SDK, et al. with DeepStructure?

Is DeepStructure compatible with OpenAI, Anthropic, et al. models?

Is DeepStructure a visual workflow builder?

Does DeepStructure support Python?

Does DeepStructure allow self-hosted deployments of the platform?

Does DeepStructure integrate with my existing APM / observability / BI tooling?

Is DeepStructure open-source?

Do you train models with my application data?

Do you have a Discord or Slack community?

Are you SOC 2, HIPAA, ISO 27001 compliant?

How are you different from OpenAI?

How are you different from Braintrust, HumanLoop, et al.?

How are you different from Temporal, Inngest, Cloudflare Workflows, et al.?

Can I integrate DeepStructure into my existing application?

Can I use LangChain, LlamaIndex, AI SDK, et al. with DeepStructure?

Is DeepStructure compatible with OpenAI, Anthropic, et al. models?

Is DeepStructure a visual workflow builder?

Does DeepStructure support Python?

Does DeepStructure allow self-hosted deployments of the platform?

Does DeepStructure integrate with my existing APM / observability / BI tooling?

Is DeepStructure open-source?

Do you train models with my application data?

Do you have a Discord or Slack community?

Are you SOC 2, HIPAA, ISO 27001 compliant?

Trusted by