Skip to main content
Glama
jeanlopezxyz

Sessionize

by jeanlopezxyz

Sessionize MCP Server

npm License

MCP server for accessing Sessionize event data — speakers, sessions, and schedules — from any MCP-compatible AI assistant (Claude Desktop, Claude Code, Cursor, Windsurf, VS Code…).

Built with Quarkus 3.33 + Java 25 + Quarkus MCP Server 1.13, distributed as a tiny native executable (Mandrel) and via npx mcp-sessionize.


Features

Tools

Tool

Description

sessionize_get_speakers

List all speakers (paginated)

sessionize_find_speaker

Search a speaker by name (paginated)

sessionize_get_sessions_by_speaker

List the sessions a speaker presents

sessionize_get_sessions

List confirmed, non-service sessions (paginated)

sessionize_find_session

Search sessions by title/description (paginated)

sessionize_get_schedule

Get the event schedule by day and time slot

Tool names use the sessionize_ prefix (snake_case) to avoid collisions when used alongside other MCP servers. All tools are annotated as read-only and idempotent (@Tool.Annotations), so MCP clients know they never mutate state. List tools accept limit (default 25, max 100) and offset arguments and return pagination metadata.

Prompts

Prompt

Description

event_overview

Conference overview (speaker/session counts, topics)

find_speaker_info

Detailed info about a speaker

sessions_by_topic

Find sessions on a topic/technology

conference_schedule

Full schedule by day and time

speaker_sessions

Sessions presented by a speaker

recommend_sessions

Session recommendations based on interests


Related MCP server: Granola Local Archive

How MCP Works — Architecture & Concepts

A short primer on why this server is shaped the way it is. An MCP server is not just an API proxy — it exposes capabilities to an AI model through three distinct primitives, each with its own control model (who decides when it runs).

The architecture

MCP follows a host → client → server model. The host (the AI application) runs one client per server; each server exposes its capabilities over JSON-RPC. Servers can be local (STDIO) or remote (HTTP).

graph LR
    subgraph Host["AI Application (Host)"]
        LLM[LLM]
        C[MCP Client]
        LLM --- C
    end
    subgraph Server["Sessionize MCP Server"]
        T[Tools]
        P[Prompts]
        R[Resources]
    end
    API[("Sessionize API")]
    C -- JSON-RPC --> Server
    T <--> API
    R <--> API

The three primitives (and who controls them)

This is the core idea: a tool is a function the model can call, not a database row. Pick the primitive by who should drive it.

Primitive

Control model

Purpose

Analogy

In this server

Tools

Model-controlled — the LLM decides when to invoke them based on the conversation

Actions / capabilities: do something, compute, query on demand

a function call / POST

findSpeaker, getSchedule… — the model actively searches the event

Resources

Application-controlled — the host decides what context to load

Data / context: expose readable content addressed by URI

a file / GET

(candidate) e.g. sessionize://{eventId}/speakers as attachable context

Prompts

User-controlled — surfaced for explicit user selection (e.g. slash commands)

Templates / workflows: guided, reusable interactions

a saved command

event_overview, recommend_sessions

So "tools must cover functionality, not just API calls" is exactly right. A good tool maps to a task the model wants to accomplish (findSpeaker by name, getSessionsBySpeaker), with a clear description, typed arguments, and behavior hints — even if under the hood it happens to call a REST API. If your tool is "return this raw dataset as context" with no decision involved, that's a Resource, not a Tool. If it's "a canned multi-step interaction the user triggers", that's a Prompt.

Beyond the three: richer capabilities

MCP 1.13 also supports server↔client interactions that make tools more than one-shot calls:

  • Sampling — the server asks the host's LLM to generate text (agentic loops) — always with a human in the loop.

  • Elicitation — a tool pauses to ask the user for additional input mid-execution.

  • Progress & cancellation — long-running tools can report progress and be cancelled.

  • Roots — the client tells the server which filesystem/URI scopes it may operate in.

This server currently uses Tools + Prompts; Resources, Sampling and Elicitation are natural next steps.


Prerequisites

To use the server (recommended path)

Requirement

Why

Node.js 18+ (npx) or Docker

To launch the prebuilt server

A Sessionize Event ID

The event whose data you want to expose (how to get it)

An MCP client

Claude Desktop, Claude Code, Cursor, Windsurf, VS Code…

The npx and Docker distributions bundle a native binary — no JDK required to run.

To build from source

Requirement

Version

Notes

JDK

25 (LTS)

Required: the project uses maven.compiler.release=25, JEP 511 module imports, and JVM flags introduced in JDK 23+. Java ≤21 will not build.

Maven

bundled

Use the included wrapper ./mvnw (Maven 3.9.x). Do not use a global mvn.

Mandrel / GraalVM 25

optional

Only needed for -Dnative builds. sdk install java 25-graalce works.

Docker

optional

Only needed to build the container image.

⚠️ JAVA_HOME gotcha. ./mvnw prefers JAVA_HOME over the java on your PATH. If JAVA_HOME points to Java ≤21 the build fails with Unrecognized option: --sun-misc-unsafe-memory-access=allow. Point it at a JDK 25:

export JAVA_HOME="$HOME/.sdkman/candidates/java/current"   # e.g. sdkman 25-graalce
./mvnw verify

Get Your Event ID

  1. Log in to Sessionize.

  2. Select your event → API / Embed → enable API.

  3. Copy the Event ID from the URL: https://sessionize.com/api/v2/{EVENT_ID}/view/All.

Set it via the SESSIONIZE_EVENT_ID environment variable (default event) or pass eventId directly in any tool call.


Installation

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "sessionize": {
      "command": "npx",
      "args": ["-y", "mcp-sessionize"],
      "env": {
        "SESSIONIZE_EVENT_ID": "your-event-id"
      }
    }
  }
}

Claude Code

claude mcp add sessionize -e SESSIONIZE_EVENT_ID="your-event-id" -- npx -y mcp-sessionize

Cursor / Windsurf / VS Code

Editor

Config file

Cursor

~/.cursor/mcp.json

Windsurf

~/.codeium/windsurf/mcp_config.json

VS Code

code --add-mcp '{"name":"sessionize","command":"npx","args":["-y","mcp-sessionize"],"env":{"SESSIONIZE_EVENT_ID":"your-event-id"}}'

Docker

The image runs in HTTP mode (Streamable HTTP at /mcp, SSE at /mcp/sse):

docker run -i --rm -p 8080:8080 \
  -e SESSIONIZE_EVENT_ID=your-event-id \
  ghcr.io/jeanlopezxyz/mcp-sessionize

Configuration

Environment variables

Variable

Default

Applies to

Description

SESSIONIZE_EVENT_ID

(empty)

all

Default event ID when a tool call omits eventId.

PORT

8080

HTTP/SSE

Port for the HTTP transport (%sse profile / Docker).

QUARKUS_MCP_SERVER_STDIO_ENABLED

true

all

false to disable STDIO (the Docker image sets this).

QUARKUS_HTTP_CORS_ORIGINS

*

HTTP/SSE

Allowed CORS origins. Restrict in production.

The Sessionize REST client uses a 10 s connect timeout and a 30 s read timeout, and forces no-cache headers.

Transports & profiles

The server picks its transport from the active Quarkus profile (configured in application.properties):

Mode

How to activate

Transport

Endpoint

STDIO (default)

run with no profile

stdio

stdin/stdout

HTTP / SSE

%sse profile (-Dquarkus.profile=sse) or the Docker image

Streamable HTTP + SSE

/mcp, /mcp/sse

Dev

./mvnw quarkus:dev

HTTP + live reload

/mcp

STDIO note. In STDIO mode Quarkus already redirects console logging to stderr and sets stdout to null, so logs never corrupt the JSON-RPC stream. The default profile uses quarkus.log.level=WARN (errors stay visible for debugging) and the banner is disabled. Never write to System.out from tool/prompt code.


Security

MCP gives an AI model the ability to act, so security is part of the design — not an afterthought. The spec defines four trust & safety principles:

  1. User consent & control — the user must understand and approve what data is accessed and what actions run.

  2. Data privacy — don't expose or transmit data beyond what's needed.

  3. Tool safety — tool descriptions and results are untrusted until verified; there must always be a human in the loop able to deny an invocation.

  4. Sampling controls — if the server asks the host's LLM to generate (sampling), the user stays in control.

When does an MCP server need hardening?

It depends on the transport and exposure, not on the data alone:

Scenario

Exposure

What it needs

Local STDIO (Claude Desktop / Code)

Runs as a child process of the host, as your OS user. No network listener.

Input validation, no secret leakage, sane timeouts. Auth is usually unnecessary (trust = the local user).

Remote HTTP / SSE (Docker, shared host)

Listens on a port; reachable over the network.

Add authentication (OAuth2 / bearer tokens), restrict CORS (no *), rate limiting, TLS/HTTPS, and request size limits.

Rule of thumb: the moment the server stops being a local stdio child and starts listening on a socket, it becomes an API and needs API-grade security.

Server-side responsibilities (per the MCP spec)

  • Validate all tool inputs before use (never trust arguments from the model).

  • Sanitize / encode outputs; don't leak stack traces or internal errors.

  • Access control & permission checks for sensitive operations and resource URIs.

  • Rate-limit invocations and set timeouts.

  • Never hardcode secrets — use env vars / a secret manager.

How this server applies them

Concern

Implementation

Input validation

sanitizeEventId strips everything non-alphanumeric before it reaches the API (prevents path/URL injection); required args are checked in validateAndExecute.

Least privilege / honesty

All tools are readOnlyHint=true, destructiveHint=false — they can only read public Sessionize data.

No data leakage

extractErrorMessage maps HTTP status codes to friendly messages instead of surfacing raw exceptions or stack traces.

No secrets in code

The only config is SESSIONIZE_EVENT_ID (an env var); the Sessionize API is public and needs no key.

Timeouts

REST client: 10 s connect / 30 s read — a hung upstream can't block the server.

Hardening checklist for remote (HTTP) deployments

  • Put authentication in front of /mcp (reverse proxy or OAuth2).

  • Replace QUARKUS_HTTP_CORS_ORIGINS=* with an explicit allow-list.

  • Add rate limiting (gateway or Quarkus filter).

  • Terminate TLS (HTTPS) and set request size limits.


Usage Examples

"Show me all speakers"
"Find speaker John Doe"
"What sessions does Jane Smith have?"
"List all sessions about Kubernetes"
"What's the schedule?"

Build From Source

# Always export a JDK 25 first (see Prerequisites)
export JAVA_HOME="$HOME/.sdkman/candidates/java/current"

./mvnw verify                 # Build + run tests (this is what CI runs)
./mvnw package                # JVM build → target/quarkus-app/
./mvnw package -Dnative       # Native executable → target/*-runner (needs Mandrel/GraalVM 25)
docker build -t mcp-sessionize .   # Multi-stage native container image

Run a local build

# JVM
java -jar target/quarkus-app/quarkus-run.jar

# Native binary (STDIO)
./target/mcp-sessionize-*-runner

# Native binary (HTTP/SSE on :8080)
./target/mcp-sessionize-*-runner -Dquarkus.profile=sse

Development

./mvnw quarkus:dev            # Dev mode: HTTP enabled, DEBUG logs, live reload

./mvnw test                   # Unit tests only
./mvnw test -Dtest=SessionizeToolTest                 # Single test class
./mvnw test -Dtest=SessionizeToolTest#testGetSchedule # Single test method

Inspect with the MCP Inspector

npx @modelcontextprotocol/inspector java -jar target/quarkus-app/quarkus-run.jar

Tech Stack

  • Java 25 (LTS) + Mandrel 25 (native)

  • Quarkus 3.33.2

  • Quarkus MCP Server 1.13.0 (MCP spec 2025-11-25) — versions managed via quarkus-mcp-server-bom


License

Apache-2.0

Available Tools

6 tools
findSessionC

Search sessions by title or description. Returns matching sessions with full details.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesText to search in session titles and descriptions
eventIdNoSessionize event ID. Optional if SESSIONIZE_EVENT_ID is set.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the tool searches and returns full details, but doesn't cover critical aspects like whether it's read-only (implied but not stated), potential rate limits, authentication needs, error handling, or pagination for large result sets. For a search tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise and well-structured: two sentences that directly state the action and result without any fluff. It's front-loaded with the core purpose, and every word earns its place, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (a search function with parameters), lack of annotations, and no output schema, the description is incomplete. It doesn't explain what 'full details' include, how results are formatted, or any behavioral constraints. For a tool that returns data, the absence of output schema means the description should compensate more, but it doesn't, leaving gaps in context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, meaning the input schema fully documents the two parameters ('query' and 'eventId') with their types, descriptions, and requirements. The description adds no additional parameter semantics beyond what's in the schema (e.g., it doesn't explain search syntax or eventId usage further). According to the rules, with high schema coverage, the baseline is 3, which is appropriate here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Search sessions by title or description' specifies the verb (search) and resource (sessions), and 'Returns matching sessions with full details' indicates the outcome. However, it doesn't explicitly differentiate from sibling tools like 'getSessions' or 'getSessionsBySpeaker', which likely also retrieve session data, so it falls short of a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'getSessions' (which might list all sessions) or 'getSessionsBySpeaker' (which filters by speaker), leaving the agent to guess based on context. This lack of explicit when-to-use or when-not-to-use instructions results in a low score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

findSpeakerC

Search for a speaker by name in a Sessionize event. Returns matching speakers with full details including bio and social links.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSpeaker name to search for
eventIdNoSessionize event ID. Optional if SESSIONIZE_EVENT_ID is set.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the tool returns 'full details including bio and social links,' which adds some context about output content. However, it doesn't cover important aspects like whether this is a read-only operation, if it requires authentication, rate limits, error conditions, or how it handles partial matches versus exact matches.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that states the purpose and key output details. It's appropriately sized for a search tool with two parameters, though it could be slightly more structured by separating purpose from output details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with 2 parameters, 100% schema coverage, and no output schema, the description provides adequate basic information about what the tool does and what it returns. However, it lacks important contextual details like search behavior (exact vs. partial matching), authentication requirements, and differentiation from sibling tools, which would be needed for full completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents both parameters (name and eventId). The description doesn't add any parameter-specific information beyond what's in the schema, such as search behavior (case sensitivity, partial matching) or eventId usage details. Baseline 3 is appropriate when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches for a speaker by name in a Sessionize event and returns matching speakers with full details. It specifies the verb ('Search'), resource ('speaker'), and scope ('Sessionize event'), but doesn't explicitly differentiate from sibling tools like getSpeakers or getSessionsBySpeaker.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like getSpeakers (which might list all speakers) or getSessionsBySpeaker (which might find sessions by speaker). There's no mention of prerequisites, when-not-to-use scenarios, or explicit alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getScheduleB

Get the event schedule/agenda from Sessionize. Returns the schedule organized by day and time slot. Note: Schedule may be empty if the event hasn't configured session times.

ParametersJSON Schema
NameRequiredDescriptionDefault
eventIdNoSessionize event ID. Optional if SESSIONIZE_EVENT_ID is set.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It discloses that returns are 'organized by day and time slot' and notes the schedule may be empty under certain conditions. However, it doesn't describe authentication needs, rate limits, error conditions, or what format the schedule data takes (beyond organization).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste. First sentence states purpose and return structure. Second sentence provides important behavioral note. Appropriately sized and front-loaded with the core functionality.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read operation with no output schema, the description provides adequate but minimal context. It explains what data is returned and a key condition (empty schedules), but doesn't cover error cases, authentication, or detailed return format. The absence of annotations increases the burden on the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the single parameter completely. The description doesn't add any parameter-specific information beyond what's in the schema. This meets the baseline expectation when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get the event schedule/agenda from Sessionize' (specific verb+resource). It distinguishes from siblings by focusing on schedule/agenda rather than sessions or speakers. However, it doesn't explicitly contrast with sibling tools like 'getSessions' which might return similar data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context through the note about empty schedules if event hasn't configured session times, but doesn't provide explicit guidance on when to use this tool versus alternatives like 'getSessions'. No when-not-to-use guidance or explicit alternative recommendations are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getSessionsB

List all sessions for a Sessionize event. Returns session titles, descriptions, speakers, and schedule information.

ParametersJSON Schema
NameRequiredDescriptionDefault
eventIdNoSessionize event ID. Optional if SESSIONIZE_EVENT_ID is set.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions the return data structure (session titles, descriptions, speakers, schedule information) but doesn't cover important behavioral aspects like pagination, rate limits, authentication requirements, or error conditions. The description is insufficient for a tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that clearly communicates the tool's purpose and return values without any wasted words. It's appropriately sized and front-loaded with essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read operation with one optional parameter and 100% schema coverage, the description is adequate but has gaps. Without annotations or output schema, it should ideally mention more about the return format (e.g., JSON structure, pagination) and operational constraints. It meets minimum viability but lacks completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the single parameter completely. The description doesn't add any parameter-specific information beyond what's in the schema, maintaining the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('List') and resource ('sessions for a Sessionize event'), and specifies what information is returned. However, it doesn't explicitly differentiate from sibling tools like 'getSessionsBySpeaker' or 'findSession'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives like 'getSessionsBySpeaker' or 'findSession'. The description only states what the tool does without indicating appropriate contexts or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getSessionsBySpeakerB

Get all sessions for a specific speaker. Returns the list of sessions the speaker is presenting.

ParametersJSON Schema
NameRequiredDescriptionDefault
speakerNameYesSpeaker name to search for
eventIdNoSessionize event ID. Optional if SESSIONIZE_EVENT_ID is set.

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool returns a list of sessions, but doesn't describe key traits like whether it's read-only (implied by 'Get'), error handling (e.g., if speaker not found), pagination, rate limits, or authentication needs. For a tool with no annotations, this leaves significant gaps in understanding its behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded: two concise sentences that directly state the tool's purpose and output. There is zero waste or redundancy, making it easy to understand quickly without unnecessary details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (2 parameters, no output schema, no annotations), the description is minimally adequate. It covers the basic purpose and output but lacks details on behavioral traits, error cases, or how it differs from siblings. Without annotations or output schema, more context would be helpful for an agent to use it effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no parameter semantics beyond what the input schema provides. The schema has 100% description coverage, clearly documenting 'speakerName' as required and 'eventId' as optional with a default. Since the schema does the heavy lifting, the baseline score of 3 is appropriate, as the description doesn't compensate or add extra meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get all sessions for a specific speaker' specifies the verb ('Get') and resource ('sessions'), and 'Returns the list of sessions the speaker is presenting' clarifies the output. It distinguishes from siblings like 'getSessions' (which likely gets all sessions) and 'findSpeaker' (which finds speaker details), but could be more explicit about differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by stating it's for a 'specific speaker,' suggesting it should be used when you have a speaker name and want their sessions. However, it doesn't explicitly mention when to use this versus alternatives like 'findSession' or 'getSessions,' nor does it provide exclusions or prerequisites beyond the required parameter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getSpeakersA

List all speakers for a Sessionize event. Returns speaker names, bios, taglines, and social links. If eventId is not provided, uses the configured default event.

ParametersJSON Schema
NameRequiredDescriptionDefault
eventIdNoSessionize event ID. Optional if SESSIONIZE_EVENT_ID is set.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the return format (speaker details) and the default event behavior, but lacks information on potential limitations like rate limits, error handling, or pagination. It does not contradict any annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed by output details and parameter guidance in two efficient sentences. Every sentence adds necessary information without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one optional parameter, no annotations, no output schema), the description is mostly complete for a read-only list operation. It covers purpose, output, and parameter logic, but could improve by addressing behavioral aspects like error cases or data freshness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents the single optional parameter. The description adds minimal value by reiterating the default event behavior, but does not provide additional syntax or format details beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('List all speakers'), resource ('for a Sessionize event'), and output details ('speaker names, bios, taglines, and social links'), distinguishing it from siblings like 'findSpeaker' (likely for individual lookups) and 'getSessionsBySpeaker' (session-focused).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context on when to use this tool (to retrieve all speakers for an event) and includes a conditional rule for the eventId parameter (uses default if not provided). However, it does not explicitly state when not to use it or name alternatives among siblings like 'findSpeaker' for specific speaker searches.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.5/5.0
Disambiguation4/5

Most tools have distinct purposes, but 'getSessions' and 'findSession' could cause some confusion as both retrieve session information. 'getSessions' lists all sessions, while 'findSession' searches by criteria, but the overlap might lead to misselection in certain contexts.

Naming Consistency5/5

All tool names follow a consistent camelCase pattern with clear verb-noun combinations (e.g., findSession, getSchedule, getSessionsBySpeaker). The naming is predictable and readable throughout the set.

Tool Count5/5

With 6 tools, this is well-scoped for a Sessionize server, covering core operations like searching, listing, and retrieving sessions and speakers. Each tool has a clear purpose and contributes to the functionality without being excessive or sparse.

Completeness4/5

The tool set provides good coverage for reading and searching sessions and speakers, including schedule retrieval. However, there are minor gaps such as lack of update or delete operations for events, which might be expected in a full CRUD lifecycle, but agents can likely work around this for typical query-focused use cases.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jeanlopezxyz/mcp-sessionize'

If you have feedback or need assistance with the MCP directory API, please join our Discord server