From 36d91e76127e2fb5569566f80dd5844a3827936b Mon Sep 17 00:00:00 2001 From: Peter Jausovec Date: Wed, 22 Oct 2025 16:05:50 +0200 Subject: [PATCH 1/5] add local dev guide Signed-off-by: Peter Jausovec --- public/images/localdev-run-tui.png | Bin 0 -> 69084 bytes public/sitemap.xml | 167 +++++++------ .../local-development/page.mdx | 235 ++++++++++++++++++ .../getting-started/system-prompts/page.mdx | 2 +- .../kagent/getting-started/tracing/page.mdx | 2 +- src/config/navigation.json | 25 +- 6 files changed, 339 insertions(+), 92 deletions(-) create mode 100644 public/images/localdev-run-tui.png create mode 100644 src/app/docs/kagent/getting-started/local-development/page.mdx diff --git a/public/images/localdev-run-tui.png b/public/images/localdev-run-tui.png new file mode 100644 index 0000000000000000000000000000000000000000..d00f40a92e795ff7915f898ac5bb0988a86502dd GIT binary patch literal 69084 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 literal 0 HcmV?d00001 diff --git a/public/sitemap.xml b/public/sitemap.xml index 1c9fd2ad..b18581e2 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -2,560 +2,567 @@ https://kagent.dev/agents - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/blog - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/community - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/concepts/agents - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/concepts/architecture - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/concepts - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/concepts/tools - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/examples/a2a-agents - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/examples/a2a-byo - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/examples/crewai-byo - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/examples/discord-a2a - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/examples/documentation - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/examples/langchain-byo - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/examples - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/examples/slack-a2a - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/getting-started/first-agent - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/getting-started/first-mcp-tool - 2025-10-21 + 2025-10-22 + weekly + 0.8 + + + + https://kagent.dev/docs/kagent/getting-started/local-development + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/getting-started - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/getting-started/quickstart - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/getting-started/system-prompts - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/getting-started/tracing - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/introduction/installation - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/introduction - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/introduction/what-is-kagent - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/resources/api-ref - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/resources/faq - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/resources/helm - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/resources - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/resources/release-notes - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/resources/troubleshooting - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/supported-providers/amazon-bedrock - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/supported-providers/anthropic - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/supported-providers/azure-openai - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/supported-providers/byo-openai - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/supported-providers/gemini - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/supported-providers/google-vertexai - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/supported-providers/ollama - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/supported-providers/openai - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kagent/supported-providers - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kmcp/deploy/install-controller - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kmcp/deploy - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kmcp/deploy/server - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kmcp/develop/fastmcp-python - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kmcp/develop/mcp-go - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kmcp/develop - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kmcp/introduction - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kmcp - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kmcp/quickstart - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kmcp/reference/api-ref - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kmcp/reference/kmcp-add-tool - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kmcp/reference/kmcp-build - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kmcp/reference/kmcp-deploy - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kmcp/reference/kmcp-init - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kmcp/reference/kmcp-install - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kmcp/reference/kmcp-run - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kmcp/reference/kmcp-secrets - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kmcp/reference - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs/kmcp/secrets - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/docs - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/enterprise - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/page.tsx - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/tools - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/agents/argo-rollouts-conversion-agent - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/agents/cilium-crd-agent - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/agents/helm-agent - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/agents/istio-agent - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/agents/k8s-agent - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/agents/kgateway-agent - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/agents/observability-agent - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/agents/promql-agent - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/tools/istio - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/tools/kubernetes - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/tools/prometheus - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/tools/documentation - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/tools/helm - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/tools/argo - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/tools/grafana - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/tools/other - 2025-10-21 + 2025-10-22 weekly 0.8 https://kagent.dev/tools/cilium - 2025-10-21 + 2025-10-22 weekly 0.8 diff --git a/src/app/docs/kagent/getting-started/local-development/page.mdx b/src/app/docs/kagent/getting-started/local-development/page.mdx new file mode 100644 index 00000000..d2966aac --- /dev/null +++ b/src/app/docs/kagent/getting-started/local-development/page.mdx @@ -0,0 +1,235 @@ +--- +title: "Local Development" +pageOrder: 4 +description: "Build, test and run agents locally." +--- + +export const metadata = { + title: "Local Development", + description: "Learn how to build, test and run agents locally using kagent CLI.", + author: "kagent.dev" +}; + +# Local developmeent with kagent CLI + +In this guide, you'll learn how to develop, build and run an AI agent locally using kagent CLI, without a Kubernetes cluster. This guide is meant for developers familiar with Python. You can also create declarative agents without writing a single line of code, by following the [Your First Agent](/docs/kagent/getting-started/first-agent) guide. + +## Prerequisites + +Before you begin make sure you have the following prerequisites installed: + +- [kagent CLI](/docs/kagent/introduction/installation) +- [Python](https://www.python.org/) +- [Docker](https://www.docker.com/) and [Docker compose](https://docs.docker.com/compose/) + + +## Create a new agent + +Let's create a new agent using the kagent CLI. We'll use the `gpt-4` model from OpenAI. You can use `--model-provider` to pick other providers (e.g. OpenAI, Anthropic or Gemini). + +```shell +kagent init adk python myagent --model-name gpt-4 --model-provider OpenAI +``` + +```console +✅ Successfully created adk project in /projects/myagent +🤖 Model configuration for project: openai (gpt-4) +📁 Project structure: + myagent/ + ├── myagent/ + │ ├── __init__.py + │ ├── agent.py + │ ├── mcp_tools.py + │ └── agent-card.json + ├── kagent.yaml + ├── pyproject.toml + ├── docker-compose.yaml + └── README.md + Note: MCP server directories are created when you run 'kagent add-mcp' + +🚀 Next steps: + 1. cd myagent + 2. Customize the agent in myagent/agent.py + 3. Build the agent and MCP servers and push it to the local registry + kagent build myagent --push + 4. Run the agent locally + kagent run + 5. Deploy the agent to your local cluster + kagent deploy myagent --env-file .env.local +``` + +The main agent code will be be in the `agent.py` file. The sample agent has access two two tools - `roll_die` and `check_prime` - the first tool rools a die an returns the rolled result, while the second one checks if a given list of numbers is prime and returns the string indicating which numbers are prime. + +Before you run the agent, you must set the OpenAI API key as an environment variable. You can do this by running the following command: + +```shell +export OPENAI_API_KEY= +``` + +Let's build the agent: + +```shell +kagent build myagent +``` + +>Note the agent is automatically tagged with the `localhost:5001` registry, so make sure your Kubernetes cluster later on is configured to use this registry or push the image to a remote registry. + +Now you can run the agent locally and test it out by running the following command from the `myagent` project directory: + +```shell +cd myagent +kagent run +``` + +This will launch the terminal UI where you can interact with the agent. + +![kagent terminal UI](/images/localdev-run-tui.png "kagent run terminal UI") + +You can press CTRL+C to exit the terminal UI and stop the agent. If you make changes to the agent code, you can run `kagent build` and then `kagent run` again to see the changes. + + +## Add an MCP server to the agent + +Now let's add an MCP server to the agent. We'll use the `sum` tool from the `@modelcontextprotocol/server-everything` MCP server. You can add an stdio or remote MCP server to the agent project using the `add-mcp` command. The `add-mcp` command has a terminal UI, but you can also pass specific arguments to the command: + +```shell +kagent add-mcp server-everything --command npx --arg @modelcontextprotocol/server-everything +``` + +This command adds an entry to the `kagent.yaml` file and creates a new directory in the `myagent` project directory called `server-everything`. The directory contains the agentgateway configuration file and a `Dockerfile` for building the MCP server image. + +>The configuration file and Dockerfile are only used for local development - when deploying the agent and MCP servers to a Kubernetes cluster, the MCP server will be deployed as a separate Kubernetes resource. + +Whenever you add a new MCP server to the agent, the `docker-compose.yaml` file is updated to include the new MCP server. For example, after adding the above MCP server, the entry for it in the `docker-compose.yaml` file will look like this: + +```yaml + server-everything: + image: localhost:5001/myagent-server-everything:latest + build: + context: ./server-everything + dockerfile: Dockerfile + expose: + - "3000" +``` + +By default, all tools from the MCP server will be automatically available and added to the agent. You can also filter the tools by name or by using a predicate. For example, to only add the `add` tool, you can modify the `agent.py` file like this: + + +```python +mcp_tools = get_mcp_tools(server_filters={"server-everything": ["add"]}) +``` + +This will only include the `add` tool from the `server-everything` MCP server. Let's rebuild the project using `kagent build` and then run the agent again using `kagent run`: + +```console +You: what can you do? + +Agent: +As myagent_agent, I have several capabilities. Here are some of the things I can do: + +1. Roll dice of different sizes: You specify the number of sides, and I can roll a die with that many sides. + +2. Check if numbers are prime: After rolling a die or dice, I can check if the outcomes of the rolls are prime numbers. + +3. Add numbers: I can perform addition operations as well. + +In order to achieve these, I employ tools to perform specific functions like roll_die, check_prime, or add. I'm here to help, so feel +free to ask me to perform any of these tasks! +``` + +The agent has access to the `add` tool as it specified in the response to the user query. You can also try asking the agent to add two numbers, for example `add 2 + 2` and see if it works. + +## Deploying the project to a Kubernetes cluster + +Now let's deploy the project to a Kubernetes cluster. We'll use the `kagent deploy` command to deploy the agent and MCP servers to a Kubernetes cluster. Make sure you have a Kubernetes cluster and kagent installed in it. + +We'll preprate a `.env.production` file and include the OpenAI API key in it: + +```shell +cat << EOF > .env.production +OPENAI_API_KEY= +EOF +``` + +When deploying, we'll reference the `.env.production` file using the `--env-file` flag and the CLI will create a Secret with the API key (and any other environment variables defined in the file) and then include them in the Agent resource. + +Let's try the `--dry-run` flag to see what will be deployed. As our agent depends on an OpenAI API key, we need to provide it using the `--api-key` flag: + +```shell +kagent deploy . --env-file .env.production --dry-run +``` + +```yaml +--- +apiVersion: v1 +data: + OPENAI_API_KEY: PHlvdXItYXBpLWtleT4= +kind: Secret +metadata: + name: myagent-env + namespace: default +--- +apiVersion: kagent.dev/v1alpha2 +kind: Agent +metadata: + name: myagent + namespace: default +spec: + byo: + deployment: + env: + - name: OPENAI_API_KEY + valueFrom: + secretKeyRef: + key: OPENAI_API_KEY + name: myagent-env + image: localhost:5001/myagent:latest + type: BYO +status: + observedGeneration: 0 +--- +apiVersion: kagent.dev/v1alpha1 +kind: MCPServer +metadata: + name: server-everything + namespace: default +spec: + deployment: + args: + - '@modelcontextprotocol/server-everything' + cmd: npx + image: node:24-alpine3.21 + port: 3000 + stdioTransport: {} + transportType: stdio +status: {} +``` + +Note that the Agent image is tagged with the `localhost:5001` registry, so make sure you have either a local Docker registry running or push the image to a remote registry and then modify the agent image tag. You can also use `kagent build myagent --image ghcr.io/myorg/my-agent:v1.0.0 --push` to build the image with a specifiy name and also push it to a remote registry. + +To deploy both the agent and MCP servers to a Kubernetes cluster, you can use the same `deploy` command, but omit the `--dry-run` flag: + +```shell +kagent deploy . --env-file .env.production +``` + +The command will rebuild the images and then create and deploy the Agent and MCPServer resources to the Kubernetes cluster. + +```shell +kubectl get agent,mcpserver +``` + +```console +NAME TYPE READY ACCEPTED +agent.kagent.dev/myagent BYO True True + +NAME READY AGE +mcpserver.kagent.dev/server-everything True 112s +``` + +You can now test the deployed agent and the MCP server through kagent UI. + +## Troubleshooting + +If you run into any issues, you can start by checking the logs from the agent and/or MCP server containers. You can check the running containers using `docker ps` command and then use the `docker logs [container_id]` command to view the logs from individual container. + diff --git a/src/app/docs/kagent/getting-started/system-prompts/page.mdx b/src/app/docs/kagent/getting-started/system-prompts/page.mdx index d454ee25..34bf83a0 100644 --- a/src/app/docs/kagent/getting-started/system-prompts/page.mdx +++ b/src/app/docs/kagent/getting-started/system-prompts/page.mdx @@ -1,6 +1,6 @@ --- title: "Writing System Prompts" -pageOrder: 4 +pageOrder: 5 description: "Learn the art and science of writing effective system prompts for your kagent agents." --- diff --git a/src/app/docs/kagent/getting-started/tracing/page.mdx b/src/app/docs/kagent/getting-started/tracing/page.mdx index b87c993d..d06acab2 100644 --- a/src/app/docs/kagent/getting-started/tracing/page.mdx +++ b/src/app/docs/kagent/getting-started/tracing/page.mdx @@ -1,6 +1,6 @@ --- title: "Tracing" -pageOrder: 5 +pageOrder: 6 description: "A guide to tracing your kagent agents." --- diff --git a/src/config/navigation.json b/src/config/navigation.json index 341a58ef..43e1cd10 100644 --- a/src/config/navigation.json +++ b/src/config/navigation.json @@ -52,6 +52,11 @@ "href": "/docs/kagent/getting-started/first-mcp-tool", "description": "Learn how to add an MCP (Model Context Protocol) tool to your kagent agent." }, + { + "title": "Local Development", + "href": "/docs/kagent/getting-started/local-development", + "description": "Build, test and run agents locally." + }, { "title": "Writing System Prompts", "href": "/docs/kagent/getting-started/system-prompts", @@ -91,6 +96,11 @@ "href": "/docs/kagent/supported-providers", "description": "Learn how to configure various LLM providers like OpenAI, Azure OpenAI, Anthropic, and Ollama for kagent.", "items": [ + { + "title": "Amazon Bedrock", + "href": "/docs/kagent/supported-providers/amazon-bedrock", + "description": "Use Amazon Bedrock models with kagent via the OpenAI Chat Completions API." + }, { "title": "Anthropic", "href": "/docs/kagent/supported-providers/anthropic", @@ -101,16 +111,16 @@ "href": "/docs/kagent/supported-providers/azure-openai", "description": "Learn how to configure Azure OpenAI models in kagent." }, - { - "title": "Google Vertex AI", - "href": "/docs/kagent/supported-providers/google-vertexai", - "description": "Learn how to configure Google Vertex AI models in kagent." - }, { "title": "Gemini", "href": "/docs/kagent/supported-providers/gemini", "description": "Learn how to configure Gemini models in kagent." }, + { + "title": "Google Vertex AI", + "href": "/docs/kagent/supported-providers/google-vertexai", + "description": "Learn how to configure Google Vertex AI models in kagent." + }, { "title": "Ollama", "href": "/docs/kagent/supported-providers/ollama", @@ -121,11 +131,6 @@ "href": "/docs/kagent/supported-providers/openai", "description": "Learn how to configure OpenAI models in kagent." }, - { - "title": "Amazon Bedrock", - "href": "/docs/kagent/supported-providers/amazon-bedrock", - "description": "Use Amazon Bedrock models with kagent via the OpenAI Chat Completions API." - }, { "title": "BYO OpenAI-compatible model", "href": "/docs/kagent/supported-providers/byo-openai", From b8353fab6ba136e05a8f88e8c8db16baf53f4386 Mon Sep 17 00:00:00 2001 From: Peter Jausovec Date: Tue, 28 Oct 2025 16:30:54 +0100 Subject: [PATCH 2/5] Update src/app/docs/kagent/getting-started/local-development/page.mdx Co-authored-by: Art Signed-off-by: Peter Jausovec --- src/app/docs/kagent/getting-started/local-development/page.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/docs/kagent/getting-started/local-development/page.mdx b/src/app/docs/kagent/getting-started/local-development/page.mdx index d2966aac..86262a05 100644 --- a/src/app/docs/kagent/getting-started/local-development/page.mdx +++ b/src/app/docs/kagent/getting-started/local-development/page.mdx @@ -58,7 +58,7 @@ kagent init adk python myagent --model-name gpt-4 --model-provider OpenAI kagent deploy myagent --env-file .env.local ``` -The main agent code will be be in the `agent.py` file. The sample agent has access two two tools - `roll_die` and `check_prime` - the first tool rools a die an returns the rolled result, while the second one checks if a given list of numbers is prime and returns the string indicating which numbers are prime. +The main agent code will be be in the `agent.py` file. The sample agent has access to two tools, `roll_die` and `check_prime`. The first tool rolls a die and returns the rolled result. The second tool checks if a given list of numbers is prime and returns the string indicating which numbers are prime. Before you run the agent, you must set the OpenAI API key as an environment variable. You can do this by running the following command: From 26f88f43cecea4db189ce3f52e079996ee1e623b Mon Sep 17 00:00:00 2001 From: Peter Jausovec Date: Tue, 28 Oct 2025 16:31:01 +0100 Subject: [PATCH 3/5] Update src/app/docs/kagent/getting-started/local-development/page.mdx Co-authored-by: Art Signed-off-by: Peter Jausovec --- src/app/docs/kagent/getting-started/local-development/page.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/docs/kagent/getting-started/local-development/page.mdx b/src/app/docs/kagent/getting-started/local-development/page.mdx index 86262a05..f94c694a 100644 --- a/src/app/docs/kagent/getting-started/local-development/page.mdx +++ b/src/app/docs/kagent/getting-started/local-development/page.mdx @@ -96,7 +96,7 @@ Now let's add an MCP server to the agent. We'll use the `sum` tool from the `@mo kagent add-mcp server-everything --command npx --arg @modelcontextprotocol/server-everything ``` -This command adds an entry to the `kagent.yaml` file and creates a new directory in the `myagent` project directory called `server-everything`. The directory contains the agentgateway configuration file and a `Dockerfile` for building the MCP server image. +This command adds an entry to the `kagent.yaml` file and creates a new directory in the `myagent` project directory called `server-everything`. The directory has an agentgateway configuration file for serving the MCP tool locally and a `Dockerfile` for building the MCP server image. >The configuration file and Dockerfile are only used for local development - when deploying the agent and MCP servers to a Kubernetes cluster, the MCP server will be deployed as a separate Kubernetes resource. From 3c2f57d689e108414691100994a3314ffa5e177f Mon Sep 17 00:00:00 2001 From: Peter Jausovec Date: Tue, 28 Oct 2025 16:31:07 +0100 Subject: [PATCH 4/5] Update src/app/docs/kagent/getting-started/local-development/page.mdx Co-authored-by: Art Signed-off-by: Peter Jausovec --- src/app/docs/kagent/getting-started/local-development/page.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/docs/kagent/getting-started/local-development/page.mdx b/src/app/docs/kagent/getting-started/local-development/page.mdx index f94c694a..b497b5c8 100644 --- a/src/app/docs/kagent/getting-started/local-development/page.mdx +++ b/src/app/docs/kagent/getting-started/local-development/page.mdx @@ -98,7 +98,7 @@ kagent add-mcp server-everything --command npx --arg @modelcontextprotocol/serve This command adds an entry to the `kagent.yaml` file and creates a new directory in the `myagent` project directory called `server-everything`. The directory has an agentgateway configuration file for serving the MCP tool locally and a `Dockerfile` for building the MCP server image. ->The configuration file and Dockerfile are only used for local development - when deploying the agent and MCP servers to a Kubernetes cluster, the MCP server will be deployed as a separate Kubernetes resource. +>The configuration file and Dockerfile are only used for local development. When deploying the agent and MCP servers to a Kubernetes cluster, the MCP server will be deployed as a separate Kubernetes resource. Whenever you add a new MCP server to the agent, the `docker-compose.yaml` file is updated to include the new MCP server. For example, after adding the above MCP server, the entry for it in the `docker-compose.yaml` file will look like this: From b1c14e7da5fd4a9f6ecefec0ccd96347717e848d Mon Sep 17 00:00:00 2001 From: Peter Jausovec Date: Tue, 28 Oct 2025 16:31:13 +0100 Subject: [PATCH 5/5] Update src/app/docs/kagent/getting-started/local-development/page.mdx Co-authored-by: Art Signed-off-by: Peter Jausovec --- src/app/docs/kagent/getting-started/local-development/page.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/docs/kagent/getting-started/local-development/page.mdx b/src/app/docs/kagent/getting-started/local-development/page.mdx index b497b5c8..f5253992 100644 --- a/src/app/docs/kagent/getting-started/local-development/page.mdx +++ b/src/app/docs/kagent/getting-started/local-development/page.mdx @@ -163,7 +163,7 @@ kagent deploy . --env-file .env.production --dry-run --- apiVersion: v1 data: - OPENAI_API_KEY: PHlvdXItYXBpLWtleT4= + OPENAI_API_KEY: kind: Secret metadata: name: myagent-env