scheduling

Meeting scheduling across time zones: slot finding, DST checks, .ics invites.

사용해야 할까요

품질 및 안전성

A
설명 품질
98%
스키마 완전성
86%
이름 품질
84%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~2,870토큰 (도구 정의)
~2.2 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 2.24%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "scheduling": {
      "command": "uvx",
      "args": [
        "https://github.com/theluckystrike/mcp-servers/releases/download/v0.21.0/timezone.mcpb"
      ]
    }
  }
}

실행 가능한 패키지

mcpbhttps://github.com/theluckystrike/mcp-servers/releases/download/v0.21.0/timezone.mcpb0.21.0stdio
mcpbhttps://github.com/theluckystrike/mcp-servers/releases/download/v0.22.0/timezone.mcpb0.22.0stdio

원격 엔드포인트

https://mcp.zovo.one/mcp/schedulingstreamable-http

할 수 있는 일

도구 목록

도구 (11)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢license_status

Report this endpoint's licence state for your token as JSON: the product, the tier free or pro, why it is not Pro, and the checkout URL. Call it to explain a free-tier refusal. No arguments, nothing changes.

입력 스키마

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪license_activate(key)

Turn Pro on for this connection with key, an MCPL1.<payload>.<signature> issued at checkout for this server or the bundle. Data under your token stays; a wrong or expired key changes nothing. license_status confirms it.

입력 스키마

{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "description": "License key from checkout, MCPL1.<payload>.<signature>"
    }
  },
  "required": [
    "key"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪now(zones)

The current time in one or more places, each with the zone it resolved to and the local date, time and offset, under one UTC instant. Accepts IANA zones, cities, countries and abbreviations.

입력 스키마

{
  "type": "object",
  "properties": {
    "zones": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 100
      },
      "maxItems": 50,
      "description": "Places or IANA zones, e.g. ['Warsaw','New York','India']"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪convert_time(time, from_zone, to_zones, gap, fold)

Convert one time from from_zone into every zone in to_zones, marking any day change, plus the UTC instant. The time is wall-clock in from_zone unless it carries an offset or a trailing Z. '3pm tomorrow' works.

입력 스키마

{
  "type": "object",
  "properties": {
    "time": {
      "type": "string",
      "maxLength": 100,
      "description": "'2026-09-10 15:00', '2026-09-10T15:00:00Z', '3pm tomorrow', 'now'"
    },
    "from_zone": {
      "type": "string",
      "maxLength": 100,
      "description": "Place the time is given in, e.g. 'Warsaw' or 'Europe/Warsaw'"
    },
    "to_zones": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 100
      },
      "minItems": 1,
      "maxItems": 50,
      "description": "Places to convert into"
    },
    "gap": {
      "type": "string",
      "enum": [
        "forward",
        "backward"
      ],
      "description": "What to do with a time that does not exist because the clocks jumped forward: 'forward' takes the time after the jump, 'backward' the time before it. Without this, such a time is refused."
    },
    "fold": {
      "type": "string",
      "enum": [
        "first",
        "second"
      ],
      "description": "Which occurrence of a time that happens twice because the clocks went back. Default 'first'."
    }
  },
  "required": [
    "time",
    "from_zone",
    "to_zones"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪overlap(zones, work_start, work_end, date)

The window each day when every listed place is inside working hours. Computed on a real date, so a DST week that widens or narrows the overlap is reflected.

입력 스키마

{
  "type": "object",
  "properties": {
    "zones": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 100
      },
      "minItems": 2,
      "maxItems": 50,
      "description": "Places, e.g. ['Warsaw','New York','Bangalore']"
    },
    "work_start": {
      "type": "string",
      "maxLength": 16,
      "description": "Local working day start, default 09:00"
    },
    "work_end": {
      "type": "string",
      "maxLength": 16,
      "description": "Local working day end, default 17:00"
    },
    "date": {
      "type": "string",
      "maxLength": 100,
      "description": "Date to compute on, YYYY-MM-DD, default today"
    }
  },
  "required": [
    "zones"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢find_meeting_slots(participants, duration_minutes, days, earliest_date, limit, ...)

Rank the times when every participant is inside their own working hours. Returns each slot as a UTC instant with the local time for every participant and a fairness score, best first.

입력 스키마

{
  "type": "object",
  "properties": {
    "participants": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "description": "Person or client name. A name you already saved with contacts_set needs nothing else: their zone and working hours are read from the contact"
          },
          "zone": {
            "type": "string",
            "maxLength": 100,
            "description": "Their place or IANA zone. Optional: leave it out for a saved contact, and leave it out for YOURSELF - your own zone comes from your shared business profile, so you never have to be asked for it"
          },
          "work_start": {
            "type": "string",
            "maxLength": 16,
            "description": "Their local day start, default 09:00 or the saved contact's"
          },
          "work_end": {
            "type": "string",
            "maxLength": 16,
            "description": "Their local day end, default 17:00 or the saved contact's"
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "minItems": 1,
      "maxItems": 100,
      "description": "Who has to attend. A zone is OPTIONAL per person: a saved contact supplies their own, and anyone left without one (you, typically) takes the timezone on your shared business profile, so never ask the caller what timezone they are in - include yourself by name and let the server resolve it. Every slot returned is inside all of their hours; weekends in the first participant's zone are skipped. Free tier: up to 3 participants"
    },
    "duration_minutes": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 1440,
      "description": "Meeting length in minutes, default 60, at most 1440"
    },
    "days": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 366,
      "description": "How many days ahead to search, default 5, at most 366. Free tier: a search longer than 5 days is shortened to 5, not refused"
    },
    "earliest_date": {
      "type": "string",
      "maxLength": 100,
      "description": "First date to consider, YYYY-MM-DD, default today"
    },
    "limit": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100,
      "description": "How many slots to return, default 8. Slots are ranked by fairness: the score is the WORST participant's distance in hours from 13:00 local, so a slot that is 07:00 for one person never outranks one that suits everybody"
    },
    "recurring": {
      "type": "boolean",
      "description": "Pro: also report the weekly recurring times that work on every searched weekday"
    }
  },
  "required": [
    "participants"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢dst_changes(zone, year)

The clock changes in a place for a year, with the exact UTC instant and the offset before and after. Use it to check whether a recurring call moves for one of you in March or October.

입력 스키마

{
  "type": "object",
  "properties": {
    "zone": {
      "type": "string",
      "maxLength": 100,
      "description": "Place or IANA zone"
    },
    "year": {
      "type": "integer",
      "minimum": 1850,
      "maximum": 2200,
      "description": "Calendar year, default this year"
    }
  },
  "required": [
    "zone"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢business_days(from, to, zone, holidays)

Count business days between two dates in a place, inclusive, with the calendar total and the weekend and holiday counts. It has NO holiday calendar: without holidays, only weekends are excluded.

입력 스키마

{
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "maxLength": 100,
      "description": "Start date, YYYY-MM-DD (inclusive). A date that does not exist, such as 2026-02-30, is refused, never rolled forward"
    },
    "to": {
      "type": "string",
      "maxLength": 100,
      "description": "End date, YYYY-MM-DD (inclusive)"
    },
    "zone": {
      "type": "string",
      "maxLength": 100,
      "description": "Place whose calendar to use"
    },
    "holidays": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 32
      },
      "maxItems": 400,
      "description": "Dates to exclude, strict YYYY-MM-DD. This tool has no national holiday calendar: unless you pass holidays here only weekends are excluded, so do not report the answer as a public-holiday-adjusted count"
    }
  },
  "required": [
    "from",
    "to",
    "zone"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡contacts_set(name, zone, work_start, work_end)

Save one person's zone and working hours so later calls can name them. Returns the resolved zone and their local time now. Saving the same name REPLACES that contact and says so. Free: 5 contacts.

입력 스키마

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1,
      "description": "Their name"
    },
    "zone": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1,
      "description": "Their place or IANA zone"
    },
    "work_start": {
      "type": "string",
      "maxLength": 16,
      "description": "Local day start, default 09:00"
    },
    "work_end": {
      "type": "string",
      "maxLength": 16,
      "description": "Local day end, default 17:00"
    }
  },
  "required": [
    "name",
    "zone"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢contacts_list

List saved contacts with their zone, local time now, working hours and whether they are inside them; weekends count as outside. It also prints YOUR zone from the shared business profile.

입력 스키마

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡ics_create(title, start, zone, duration_minutes, attendees, ...)

Call this tool to write a .ics for one meeting and return the path plus the start in UTC and in your zone. Times are stored in UTC so it lands correctly in any client. Free: 3 files a month.

입력 스키마

{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "Event title"
    },
    "start": {
      "type": "string",
      "maxLength": 100,
      "description": "Start time, read in `zone` unless it carries an offset"
    },
    "zone": {
      "type": "string",
      "maxLength": 100,
      "description": "Place the start time is given in"
    },
    "duration_minutes": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 1440,
      "description": "Length in minutes, at most 1440"
    },
    "attendees": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "string",
            "maxLength": 200
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "maxLength": 200,
                "description": "Display name"
              },
              "email": {
                "type": "string",
                "maxLength": 200,
                "description": "Their email address"
              }
            },
            "additionalProperties": false
          }
        ]
      },
      "maxItems": 100,
      "description": "Attendees. An entry with an email is invited (ATTENDEE:mailto:...); a name with no email is listed in the description instead, because a calendar cannot invite a name."
    },
    "organizer_email": {
      "type": "string",
      "maxLength": 200,
      "description": "Your email address, written as the ORGANIZER so replies have somewhere to go. Leave it out and your shared business profile's email is used; with neither, the ORGANIZER line is omitted rather than filled with an address you improvised"
    },
    "organizer_name": {
      "type": "string",
      "maxLength": 200,
      "description": "Your display name for the ORGANIZER line"
    },
    "description": {
      "type": "string",
      "maxLength": 5000,
      "description": "Body text"
    },
    "location": {
      "type": "string",
      "maxLength": 200,
      "description": "Where, or a meeting link"
    },
    "out_path": {
      "type": "string",
      "maxLength": 4096,
      "description": "Name for the downloaded file, default meeting.ics"
    },
    "gap": {
      "type": "string",
      "enum": [
        "forward",
        "backward"
      ],
      "description": "What to do with a time that does not exist because the clocks jumped forward: 'forward' takes the time after the jump, 'backward' the time before it. Without this, such a time is refused."
    },
    "fold": {
      "type": "string",
      "enum": [
        "first",
        "second"
      ],
      "description": "Which occurrence of a time that happens twice because the clocks went back. Default 'first'."
    }
  },
  "required": [
    "title",
    "start",
    "zone",
    "duration_minutes"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 11개
검증됨버전이 기록되지 않음도구 11개