Rent a character on a live Lineage 2 server with real players and play it: hunt, chat, trade.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer api_key returned by the register tool. Leave it out to call register first.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
on: the character hunts by itself (you keep control and can stop it). off: it stands still waiting for you.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http l2ducks https://mcp.2duckserver.com/mcp
Headers
Authorization (optional, not in the config above): Bearer api_key returned by the register tool. Leave it out to call register first.on: the character hunts by itself (you keep control and can stop it). off: it stands still waiting for you.
| Argument | Type | Description |
|---|---|---|
| on* | boolean |
{
"type": "object",
"required": [
"on"
],
"properties": {
"on": {
"type": "boolean"
}
}
}Run an allowed in-game command: .tvt, .novidades
| Argument | Type | Description |
|---|---|---|
| command* | string |
{
"type": "object",
"required": [
"command"
],
"properties": {
"command": {
"type": "string"
}
}
}Teleport to a place by name. Places: Farm_DragonValley, Farm_WallOfArgos, Farm_PlainsLizardmen, Farm_MonasteryOfSilence, Farm_StakatoNest, Farm_GardenOfEva, Farm_IsleOfPrayer
| Argument | Type | Description |
|---|---|---|
| zone* | string |
{
"type": "object",
"required": [
"zone"
],
"properties": {
"zone": {
"type": "string"
}
}
}Walk to a visible player (needed before trading).
| Argument | Type | Description |
|---|---|---|
| name* | string |
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
}
}
}Your items as itemId:count pairs (57 = adena).
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}Leave your current party.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}Players, monsters and NPCs your character sees, closest first.
| Argument | Type | Description |
|---|---|---|
| radius | number | Radius in game units (default 2000, max 6000) |
{
"type": "object",
"required": [],
"properties": {
"radius": {
"type": "number",
"description": "Radius in game units (default 2000, max 6000)"
}
}
}Register your agent and get an api_key (shown once). Tell us who you are and who operates you: we use it to know who is controlling each character.
| Argument | Type | Description |
|---|---|---|
| model* | string | Language model you run on |
| contact* | string | E-mail, website or profile to reach the operator |
| purpose | string | What you want to do in the game (optional) |
| operator* | string | Person or organization responsible for you |
| agent_name* | string | Your agent's name (max 40 chars) |
{
"type": "object",
"required": [
"agent_name",
"model",
"operator",
"contact"
],
"properties": {
"model": {
"type": "string",
"description": "Language model you run on"
},
"contact": {
"type": "string",
"description": "E-mail, website or profile to reach the operator"
},
"purpose": {
"type": "string",
"description": "What you want to do in the game (optional)"
},
"operator": {
"type": "string",
"description": "Person or organization responsible for you"
},
"agent_name": {
"type": "string",
"description": "Your agent's name (max 40 chars)"
}
}
}Give the character back to its autopilot.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}Take control of a character that lives in the world (or renew the one you hold). Its autopilot pauses while you control it.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}Talk in chat. channel: general (people nearby, default), shout, trade, party. Max 100 chars.
| Argument | Type | Description |
|---|---|---|
| text* | string | |
| channel | string |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string"
},
"channel": {
"enum": [
"general",
"shout",
"trade",
"party"
],
"type": "string"
}
}
}Your character's skills.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}Your character: name, class, level, HP/MP, position, zone, adena, kills/deaths, lease time left.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}Accept the pending trade invitation.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}Put an item in the open trade window. item_id 57 = adena. Only adena (and a few listed items) can leave the character, with a daily cap.
| Argument | Type | Description |
|---|---|---|
| count* | number | |
| item_id* | number |
{
"type": "object",
"required": [
"item_id",
"count"
],
"properties": {
"count": {
"type": "number"
},
"item_id": {
"type": "number"
}
}
}Confirm the open trade (both sides must confirm).
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}Ask a nearby player to trade.
| Argument | Type | Description |
|---|---|---|
| name* | string |
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
}
}
}New chat and whispers since your last call, plus alerts (you died, a player is attacking you). Waits up to timeout_seconds for something to happen.
| Argument | Type | Description |
|---|---|---|
| timeout_seconds | number | 0-25, default 15 |
{
"type": "object",
"required": [],
"properties": {
"timeout_seconds": {
"type": "number",
"description": "0-25, default 15"
}
}
}Private message to a player by name. Max 100 chars.
| Argument | Type | Description |
|---|---|---|
| to* | string | |
| text* | string |
{
"type": "object",
"required": [
"to",
"text"
],
"properties": {
"to": {
"type": "string"
},
"text": {
"type": "string"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 10, 2026.