Skip to main content

Try AIControls with free models and a public MCP server

Getting Started

Try AIControls end to end without a paid provider key. You connect a free OpenRouter model and the public DeepWiki MCP server, deploy a small sample agent, and take it from its first blocked call to Enforce. Plan on about 30 minutes, most of it waiting for the agent to make calls.

This guide is for trying things out. For production, connect your organization's provider in the setup wizard. See Protect your first agent.

Before you begin​

  • A Kubernetes cluster with outbound internet access, and permission to install a Helm chart and deploy a workload. On your workstation, a kind cluster works.
  • A free OpenRouter account.

Free models and DeepWiki have limits:

  • Free models have daily rate limits, and some of their providers log prompts. Don't send them anything sensitive.
  • DeepWiki answers questions about public GitHub repositories only. It needs no sign-in, and AIControls calls it at mcp.deepwiki.com over the internet, so it doesn't work in an air-gapped cluster.

1. Get a free OpenRouter key​

  1. Sign in at openrouter.ai.
  2. Create a key at openrouter.ai/settings/keys. It starts with sk-or-v1-.

Models whose ID ends in :free, such as nvidia/nemotron-3.5-lightning:free, need no credits. The key comes from your own account; AIControls doesn't ship one.

2. Install AIControls​

If you have a checkout of the AIControls source, one command creates a kind cluster, installs AIControls from the checkout, and does steps 3 to 5 for you:

OPENROUTER_API_KEY=sk-or-v1-... DEPLOY_AGENT=1 make kind-quickstart

The command:

  • Adds an OpenRouter upstream named openrouter with your key.
  • Grants the free model nvidia/nemotron-3.5-lightning:free to the default Workload Blueprint, so agents you register with it can call the model.
  • Adds the DeepWiki MCP server as deepwiki.
  • Deploys the sample agent, support/faq-agent.

It prints the UI URL and the admin login, and starts a port-forward. Log in. The setup wizard preselects the openrouter upstream as configured; select Test call, then Continue through the remaining steps. Continue at step 6.

For the command's options, see Quickstart on kind. To delete the cluster, run make kind-quickstart-down.

3. Add OpenRouter​

  1. In the setup wizard's Model step, select OpenRouter. Or follow No key? Try free models →, which opens this guide.
  2. Paste your key into OpenRouter API key, and keep the preselected model, nvidia/nemotron-3.5-lightning:free.
  3. Select Save and test. When Your model answered appears, select Continue.

If you're past the wizard, add the upstream on Settings → Providers instead. See Add a provider, and grant the model in the default Blueprint's Access Binding, which is named default. See Edit the Blueprint's Access Binding.

4. Add DeepWiki​

  1. Go to Inventory → MCP Servers → Registration, and select Add MCP Server.
  2. Select the DeepWiki preset, or enter the name deepwiki, the URL https://mcp.deepwiki.com/mcp, the Streamable HTTP transport, and no authentication.
  3. Save. AIControls lists the server's tools through the gateway: read_wiki_structure, read_wiki_contents, and ask_question.

If your egress allowlist is restricted, adding the server adds mcp.deepwiki.com to it. See Connect an MCP server.

5. Deploy the sample agent​

Deploy the sample FAQ agent from Deploy an agent that calls the gateway. Its defaults match this guide: every five minutes it asks the free model a support question, and calls DeepWiki's read_wiki_structure tool for a public repository:

MODEL: "nvidia/nemotron-3.5-lightning:free"
MCP_TOOL: "deepwiki__read_wiki_structure"
MCP_ARGS: '{"repoName":"facebook/react"}'

Watch its calls. Each call logs one line: ALLOWED, BLOCKED with the reason AIControls gave, or ERROR with the status.

kubectl -n support logs deploy/faq-agent -f

6. Walk through the protection loop​

Each step links to its section in Protect your first agent, which has the details.

  1. Blocked. A new installation blocks calls from unregistered agents (Enforce), so the agent's first calls are blocked, because it isn't registered. The agent logs BLOCKED (403) with workload_not_registered, and the Dashboard shows Blocked an unregistered agent.
  2. Discovered. The blocked call puts the agent on Inventory → Workloads as Discovered, with the evidence. See See the agent discovered.
  3. Register. Select Register it, keep the default Blueprint, and keep Learn first (Audit). See Register it in one step. To see the next calls sooner, restart the agent: kubectl -n support rollout restart deploy/faq-agent.
  4. Learn first. The agent's calls go through and are recorded. The model call is already granted by the default Blueprint, and the DeepWiki tool call becomes a recommendation on the workload's AI access tab within a few minutes.
  5. Promote all. Review the recommendations, then select Promote all. See Learn its access, then promote it.
  6. Enforce. On the Mode card, select Enforce, review the preview, and confirm. The model and the tool it learned stay allowed. See Switch to Enforce.
  7. Blocked call. Make a call the agent never made. Switch the tool to DeepWiki's ask_question:

    kubectl -n support patch configmap faq-agent --type merge -p '{"data":{"MCP_TOOL":"deepwiki__ask_question","MCP_ARGS":"{\"repoName\":\"facebook/react\",\"question\":\"What is a hook?\"}"}}'
    kubectl -n support rollout restart deploy/faq-agent

    The agent logs MCP deepwiki__ask_question BLOCKED with accessdefault:mcp:workload. Or switch the model to another free model, and see the model call blocked instead:

    kubectl -n support patch configmap faq-agent --type merge -p '{"data":{"MODEL":"google/gemma-4-31b-it:free"}}'
    kubectl -n support rollout restart deploy/faq-agent

    The blocked calls show on Security → Activity. To go back, set MCP_TOOL and MCP_ARGS, or MODEL, to the values in step 5.

  8. Create Blueprint. On the AI access tab, select Create Blueprint from this workload to reuse the learned access for similar agents. See Reuse its access for similar workloads.

A free model's daily limit shows in the agent log as ERROR (429). That's OpenRouter, not AIControls.

Clean up​

To remove the sample agent:

kubectl delete namespace support

With the kind quickstart, delete the whole cluster instead:

make kind-quickstart-down

Spend free credit from several vendors​

Several vendors give new accounts free credit or a free tier: DeepSeek grants credit on signup, Groq and Cerebras have rate-limited free tiers, and OpenRouter serves :free models. A route spends one vendor's credit first and moves on when it runs out.

  1. Add a provider for each vendor on Settings → Providers: select Add Upstream, pick the vendor under OpenAI-compatible vendors, and paste its key. See Add a provider.
  2. On each provider, add a Model Aliases entry that maps the model name your agents send to that vendor's model, such as claude-haiku-4-5=deepseek-v4-flash on DeepSeek and claude-haiku-4-5=openai/gpt-oss-120b on Groq.
  3. On the Routes tab, select Add Route and add the providers as members in the order you want to spend their credit, with Allow cross-provider members on so a vendor without an Anthropic endpoint, such as Groq, can serve Claude Code. See Add a route.

When DeepSeek answers 402 Insufficient Balance, the request fails over to Groq, and the Credit / quota column shows DeepSeek as Out of credit. A session that DeepSeek already served stays on Anthropic-format members, so it fails over to Groq only in a new session; see Cross-provider routes. A rate limit fails over too, but isn't reported as exhausted credit. Each call is priced by the vendor and model that served it.