diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Revision history for pty-mcp-server
 
+## 0.2.1.0 -- 2026-06-15
+
+* Added pms-infra-agent-server: TCP server listen/accept functionality for AI agents.
+* New tools: agent-server-listen, agent-server-close, agent-server-status, agent-server-events, agent-server-read, agent-server-write, agent-server-read-byte, agent-server-write-byte.
+* Added skill prompts: skill_agent_server.md, skill_agent_client.md for AI-to-AI TCP communication.
+
 ## 0.2.0.0 -- 2026-05-31
 
 * Added pms-infra-agent-socket, pms-infra-agent-serial.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -90,6 +90,30 @@
 - **`agent-socket-write-byte`**
   Decodes the specified hex string and writes the resulting bytes to the active agent socket connection.
 
+- **`agent-server-listen`**
+  Binds to the specified host and port, starts listening for incoming TCP connections, and launches a background accept thread. Returns immediately after the listener is ready. Only one listener can be active at a time.
+
+- **`agent-server-close`**
+  Closes the active accepted connection (if any). If no connection is active, also closes the listener. Call twice to close both the connection and the listener.
+
+- **`agent-server-status`**
+  Returns the current server status as a JSON object with `isListening` and `isConnected` boolean fields.
+
+- **`agent-server-events`**
+  Dequeues and returns all server-side events accumulated since the last call (e.g. ClientConnected, BytesReceived, ClientDisconnected). Returns an empty array if no events are pending.
+
+- **`agent-server-read`**
+  Reads data from the active accepted connection and returns it as a UTF-8 string. Returns an empty string if no data is available before timeout.
+
+- **`agent-server-read-byte`**
+  Reads data from the active accepted connection and returns it as an uppercase hex string.
+
+- **`agent-server-write`**
+  Writes the specified UTF-8 string to the active accepted connection. Note: `\r\n` is sent as literal characters; use agent-server-write-byte for correct CRLF.
+
+- **`agent-server-write-byte`**
+  Decodes the specified hex string and writes the resulting bytes to the active accepted connection. Hex string must not contain spaces or newlines.
+
 - **`agent-serial-open`**
   Opens a serial port connection for subsequent agent-serial-read, agent-serial-write, agent-serial-read-byte, and agent-serial-write-byte operations. Only one port can be active at a time.
 
@@ -571,6 +595,7 @@
 - [`pms-infra-procspawn`](https://github.com/phoityne/pms-infra-procspawn)
 - [`pms-infra-agent-process`](https://github.com/phoityne/pms-infra-agent-process)
 - [`pms-infra-agent-socket`](https://github.com/phoityne/pms-infra-agent-socket)
+- [`pms-infra-agent-server`](https://github.com/phoityne/pms-infra-agent-server)
 - [`pms-infra-agent-serial`](https://github.com/phoityne/pms-infra-agent-serial)
 - [`pms-infra-serial`](https://github.com/phoityne/pms-infra-serial)
 - [`pms-infra-socket`](https://github.com/phoityne/pms-infra-socket)
diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -20,6 +20,7 @@
 import qualified PMS.Infra.Agent.Process.App.Control as IAP
 import qualified PMS.Infra.Agent.Socket.App.Control as IAS
 import qualified PMS.Infra.Agent.Serial.App.Control as IASer
+import qualified PMS.Infra.Agent.Server.ApplicationBase.Control as IASrv
 import qualified PMS.Infra.Serial.App.Control as SER
 import qualified PMS.Infra.Socket.App.Control as SCK
 import qualified PMS.Infra.Watch.App.Control as IWA
@@ -36,9 +37,9 @@
 main :: IO ()
 main = getArgs >>= \args -> do
 #ifdef mingw32_HOST_OS
-  let apps = [URQ.run, URS.run, UNO.run, ICR.run, IPS.run, IAP.run, IAS.run, IASer.run, IWA.run, IFS.run, DSR.run, SCK.run, SER.run]
+  let apps = [URQ.run, URS.run, UNO.run, ICR.run, IPS.run, IAP.run, IAS.run, IASer.run, IASrv.run, IWA.run, IFS.run, DSR.run, SCK.run, SER.run]
 #else
-  let apps = [URQ.run, URS.run, UNO.run, ICR.run, IPS.run, IAP.run, IAS.run, IASer.run, IWA.run, IFS.run, DSR.run, SCK.run, SER.run, INF.run]
+  let apps = [URQ.run, URS.run, UNO.run, ICR.run, IPS.run, IAP.run, IAS.run, IASer.run, IASrv.run, IWA.run, IFS.run, DSR.run, SCK.run, SER.run, INF.run]
 #endif
   flip E.catchAny exception
      $ flip E.finally finalize
diff --git a/pty-mcp-server.cabal b/pty-mcp-server.cabal
--- a/pty-mcp-server.cabal
+++ b/pty-mcp-server.cabal
@@ -20,7 +20,7 @@
 -- PVP summary:     +-+------- breaking API changes
 --                  | | +----- non-breaking API additions
 --                  | | | +--- code changes with no API change
-version:            0.2.0.0
+version:            0.2.1.0
 
 -- A short (one-line) description of the package.
 synopsis:           pty-mcp-server
@@ -81,6 +81,7 @@
             pms-infra-agent-process,
             pms-infra-agent-socket,
             pms-infra-agent-serial,
+            pms-infra-agent-server,
             pms-infra-serial,
             pms-infra-socket,
             pms-infra-watch,
@@ -102,6 +103,7 @@
             pms-infra-agent-process,
             pms-infra-agent-socket,
             pms-infra-agent-serial,
+            pms-infra-agent-server,
             pms-infra-serial,
             pms-infra-socket,
             pms-infra-watch,
