Jan Linketscher

Profile and essays of Jan Linketscher (i22, Bonn), full-text search, and booking a call.

我該用這個嗎

品質與安全性

A
說明品質
90%
結構描述完整度
87%
命名品質
97%
汙染風險
100%
權限相符程度
100%
協定合規性
100%

發現項目(1)

  • LOWTool 'get_profile' description lacks action verb在 get_profile 中

根據工具定義與協定合規性的自動化分析。

上下文成本

~2,106Token(工具定義)
~2.4 KB典型回應大小
中等的注意力影響(128k 上下文的 1.65%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `claude_desktop_config.json` 檔案:

{
  "mcpServers": {
    "site": {
      "url": "https://janlinketscher.com/api/mcp"
    }
  }
}

遠端端點

https://janlinketscher.com/api/mcpstreamable-http

它能做什麼

工具清單

工具(7)

🟢 唯讀🟡 寫入🔴 刪除⚪ 未知
🟢get_profile(section)

Who Jan Linketscher is: managing director and shareholder of the digital agency i22 (Bonn), his background, how his texts are written, and how to contact him. Content is in German.

輸入結構描述

{
  "type": "object",
  "properties": {
    "section": {
      "type": "string",
      "enum": [
        "all",
        "role",
        "background",
        "writing",
        "contact"
      ],
      "description": "Limit the text answer to one section (default: all). Structured output is always complete."
    }
  },
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "role": {
      "type": "string"
    },
    "employer": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "url"
      ]
    },
    "locations": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "summary": {
      "type": "string"
    },
    "background": {
      "type": "string"
    },
    "writing": {
      "type": "string",
      "description": "How the texts are produced (AI-assisted, human-reviewed)."
    },
    "contact": {
      "type": "object",
      "properties": {
        "email": {
          "type": "string"
        },
        "linkedin": {
          "type": "string"
        },
        "website": {
          "type": "string"
        }
      },
      "required": [
        "email",
        "website"
      ]
    },
    "image": {
      "type": "string"
    },
    "about": {
      "type": "string"
    }
  },
  "required": [
    "name",
    "role",
    "employer",
    "summary",
    "contact"
  ]
}
🟢list_essays(topic, limit)

List the essays, newest first: title, date, one-sentence summary, topics, URL and slug. Optionally filter by topic slug. Also returns the available topics.

輸入結構描述

{
  "type": "object",
  "properties": {
    "topic": {
      "type": "string",
      "description": "Topic slug, e.g. \"transformation\" or \"agentic-visibility\". Omit for all essays."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "description": "Maximum number of essays (default 20)."
    }
  },
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "count": {
      "type": "integer"
    },
    "essays": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "date": {
            "type": "string",
            "format": "date"
          },
          "topics": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "url": {
            "type": "string"
          },
          "markdownUrl": {
            "type": "string"
          }
        },
        "required": [
          "slug",
          "title",
          "date",
          "url"
        ]
      }
    },
    "topics": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "count": {
            "type": "integer"
          }
        },
        "required": [
          "slug",
          "name",
          "count"
        ]
      }
    },
    "series": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "url"
      ]
    }
  },
  "required": [
    "count",
    "essays",
    "topics",
    "series"
  ]
}
🟢get_essay(slug)

Full text of one essay as Markdown (with front matter). Use the slug from list_essays or search.

輸入結構描述

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "Essay slug, e.g. \"mein-essay\" (the last part of /essays/<slug>)."
    }
  },
  "required": [
    "slug"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "date": {
      "type": "string",
      "format": "date"
    },
    "url": {
      "type": "string"
    },
    "topics": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "markdown": {
      "type": "string"
    }
  },
  "required": [
    "slug",
    "title",
    "date",
    "url",
    "markdown"
  ]
}
🟢search(query, limit)

Full-text search across all essays and pages (about, context). Returns the best matches with title, URL and a short snippet. German queries work best.

輸入結構描述

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 2,
      "description": "Search terms."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "description": "Maximum number of results (default 5)."
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "essay",
              "page"
            ]
          },
          "title": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "snippet": {
            "type": "string"
          },
          "score": {
            "type": "number"
          }
        },
        "required": [
          "kind",
          "title",
          "url",
          "snippet"
        ]
      }
    }
  },
  "required": [
    "query",
    "results"
  ]
}
🟢list_meeting_types

The kinds of calls that can be booked with Jan Linketscher ("kennenlernen" (Kennenlernen, 30 min), "sparring" (Sparring, 60 min)), with duration, purpose and a booking link for humans.

輸入結構描述

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "timeZone": {
      "type": "string"
    },
    "meetingTypes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "minutes": {
            "type": "integer"
          },
          "description": {
            "type": "string"
          },
          "bookingUrl": {
            "type": "string"
          }
        },
        "required": [
          "slug",
          "title",
          "minutes",
          "bookingUrl"
        ]
      }
    }
  },
  "required": [
    "timeZone",
    "meetingTypes"
  ]
}
🟢get_availability(meeting_type, from, to)

Free time slots for a call with Jan Linketscher. meeting_type: "kennenlernen" (Kennenlernen, 30 min), "sparring" (Sparring, 60 min). Optional date range (YYYY-MM-DD, default: the next 14 days, at most 90 days ahead). Times are ISO 8601 with offset; the text answer lists them in Europe/Berlin.

輸入結構描述

{
  "type": "object",
  "properties": {
    "meeting_type": {
      "type": "string",
      "enum": [
        "kennenlernen",
        "sparring"
      ],
      "description": "Kind of call."
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First day (YYYY-MM-DD). Default: today."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last day (YYYY-MM-DD), inclusive. Default: from + 13 days."
    }
  },
  "required": [
    "meeting_type"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "meetingType": {
      "type": "string"
    },
    "minutes": {
      "type": "integer"
    },
    "timeZone": {
      "type": "string"
    },
    "from": {
      "type": "string"
    },
    "to": {
      "type": "string"
    },
    "slots": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "start": {
            "type": "string",
            "format": "date-time"
          },
          "end": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "start",
          "end"
        ]
      }
    },
    "bookingUrl": {
      "type": "string"
    }
  },
  "required": [
    "meetingType",
    "minutes",
    "timeZone",
    "from",
    "to",
    "slots",
    "bookingUrl"
  ]
}
🔴book_meeting(meeting_type, start, name, email, notes, ...)

Book a call with Jan Linketscher on behalf of your user. The start must be a slot returned by get_availability. If your client supports elicitation (form mode, MCP 2026-07-28), the server itself asks the user to confirm time, name and email – name and email are then prefilled from your arguments and can be corrected by the user. Otherwise: show the user meeting type, date and time (with time zone), name and email, get their explicit approval, then pass name, email and confirmed: true. Use the user's real name and email; never invent them. Cal.com sends the confirmation with a calendar invite and links to reschedule or cancel to that email address.

輸入結構描述

{
  "type": "object",
  "properties": {
    "meeting_type": {
      "type": "string",
      "enum": [
        "kennenlernen",
        "sparring"
      ]
    },
    "start": {
      "type": "string",
      "format": "date-time",
      "description": "Slot start from get_availability (ISO 8601)."
    },
    "name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 100,
      "description": "Full name of the person attending."
    },
    "email": {
      "type": "string",
      "format": "email",
      "description": "Email of the person attending; the confirmation goes there."
    },
    "notes": {
      "type": "string",
      "maxLength": 1000,
      "description": "Optional: what the call is about, in one or two sentences."
    },
    "time_zone": {
      "type": "string",
      "description": "IANA time zone of the attendee, e.g. \"Europe/Berlin\" (default Europe/Berlin)."
    },
    "confirmed": {
      "type": "boolean",
      "description": "Only for clients without elicitation: true = the user has explicitly approved this booking."
    }
  },
  "required": [
    "meeting_type",
    "start"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "accepted",
        "pending",
        "not_booked"
      ],
      "description": "pending: Jan confirms the request by email. not_booked: the user declined."
    },
    "meetingType": {
      "type": "string"
    },
    "start": {
      "type": "string",
      "format": "date-time"
    },
    "end": {
      "type": "string",
      "format": "date-time"
    },
    "attendee": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "email": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "email"
      ]
    },
    "message": {
      "type": "string"
    }
  },
  "required": [
    "status",
    "meetingType",
    "start",
    "end",
    "attendee",
    "message"
  ]
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本7 個工具