refactor: drop skill file, rework client #3
+4
-2
@@ -17,7 +17,8 @@ export function registerAuthTools(server: McpServer): void {
|
|||||||
description: "Authenticate to Exchange EWS using NTLM credentials."
|
description: "Authenticate to Exchange EWS using NTLM credentials."
|
||||||
+ " On first use all fields except domain are required."
|
+ " On first use all fields except domain are required."
|
||||||
+ " On subsequent logins only password is needed — previously saved"
|
+ " On subsequent logins only password is needed — previously saved"
|
||||||
+ " serverUrl, email, username, and domain are reused automatically from config.",
|
+ " serverUrl, email, username, and domain are reused"
|
||||||
|
+ " automatically from config.",
|
||||||
inputSchema: z.object({
|
inputSchema: z.object({
|
||||||
serverUrl: z.string().optional().describe("EWS server URL"),
|
serverUrl: z.string().optional().describe("EWS server URL"),
|
||||||
email: z.string().optional().describe("Email address"),
|
email: z.string().optional().describe("Email address"),
|
||||||
@@ -176,7 +177,8 @@ export function registerAuthTools(server: McpServer): void {
|
|||||||
"logout",
|
"logout",
|
||||||
{
|
{
|
||||||
description:
|
description:
|
||||||
"Clear stored credentials (serverUrl, email, username, domain, password). No parameters.",
|
"Clear stored credentials (serverUrl, email, username, domain, password)."
|
||||||
|
+ " No parameters.",
|
||||||
inputSchema: z.object({}),
|
inputSchema: z.object({}),
|
||||||
outputSchema: z.object({
|
outputSchema: z.object({
|
||||||
success: z.boolean(),
|
success: z.boolean(),
|
||||||
|
|||||||
@@ -108,7 +108,8 @@ export function registerAvailabilityTools(server: McpServer): void {
|
|||||||
"find_meeting_time",
|
"find_meeting_time",
|
||||||
{
|
{
|
||||||
description: "Find common free time for multiple attendees."
|
description: "Find common free time for multiple attendees."
|
||||||
+ " Queries free/busy for all attendees and returns slots where everyone is available.",
|
+ " Queries free/busy for all attendees"
|
||||||
|
+ " and returns slots where everyone is available.",
|
||||||
inputSchema: z.object({
|
inputSchema: z.object({
|
||||||
emails: z.string().describe(
|
emails: z.string().describe(
|
||||||
"Comma-separated email addresses of attendees",
|
"Comma-separated email addresses of attendees",
|
||||||
|
|||||||
+4
-2
@@ -14,7 +14,8 @@ export function registerCalendarTools(server: McpServer): void {
|
|||||||
startDate: z.string().describe("Start date in YYYY-MM-DD format"),
|
startDate: z.string().describe("Start date in YYYY-MM-DD format"),
|
||||||
endDate: z.string().describe("End date in YYYY-MM-DD format"),
|
endDate: z.string().describe("End date in YYYY-MM-DD format"),
|
||||||
includeBody: z.boolean().default(false).describe(
|
includeBody: z.boolean().default(false).describe(
|
||||||
"If true, fetch full event details (organizer, attendees, body) via GetItem",
|
"If true, fetch full event details (organizer, attendees, body)"
|
||||||
|
+ " via GetItem",
|
||||||
),
|
),
|
||||||
}),
|
}),
|
||||||
outputSchema: z.object({
|
outputSchema: z.object({
|
||||||
@@ -107,7 +108,8 @@ export function registerCalendarTools(server: McpServer): void {
|
|||||||
{
|
{
|
||||||
description:
|
description:
|
||||||
"Download all file attachments from a calendar event to disk."
|
"Download all file attachments from a calendar event to disk."
|
||||||
+ " Inline (embedded) attachments are skipped — only standalone file attachments are downloaded.",
|
+ " Inline (embedded) attachments are skipped —"
|
||||||
|
+ " only standalone file attachments are downloaded.",
|
||||||
inputSchema: z.object({
|
inputSchema: z.object({
|
||||||
itemId: z.string().describe(
|
itemId: z.string().describe(
|
||||||
"The Exchange ItemId of the calendar event",
|
"The Exchange ItemId of the calendar event",
|
||||||
|
|||||||
+4
-2
@@ -16,7 +16,8 @@ export function registerEmailTools(server: McpServer): void {
|
|||||||
+ " Supports optional text search via query/queryScope.",
|
+ " Supports optional text search via query/queryScope.",
|
||||||
inputSchema: z.object({
|
inputSchema: z.object({
|
||||||
folder: z.string().default("Inbox").describe(
|
folder: z.string().default("Inbox").describe(
|
||||||
"Folder name (Inbox, Sent, Drafts, Deleted, Junk, or custom). Supports Russian folder names",
|
"Folder name (Inbox, Sent, Drafts, Deleted, Junk, or custom)."
|
||||||
|
+ " Supports Russian folder names",
|
||||||
),
|
),
|
||||||
limit: z.number().default(10).describe(
|
limit: z.number().default(10).describe(
|
||||||
"Maximum number of emails to return",
|
"Maximum number of emails to return",
|
||||||
@@ -297,7 +298,8 @@ export function registerEmailTools(server: McpServer): void {
|
|||||||
"download_attachments",
|
"download_attachments",
|
||||||
{
|
{
|
||||||
description: "Download all file attachments from an email to disk."
|
description: "Download all file attachments from an email to disk."
|
||||||
+ " Inline (embedded) attachments are skipped — only standalone file attachments are downloaded.",
|
+ " Inline (embedded) attachments are skipped —"
|
||||||
|
+ " only standalone file attachments are downloaded.",
|
||||||
inputSchema: z.object({
|
inputSchema: z.object({
|
||||||
itemId: z.string().describe("The Exchange ItemId of the email"),
|
itemId: z.string().describe("The Exchange ItemId of the email"),
|
||||||
targetFolder: z.string().default("/tmp/attachments").describe(
|
targetFolder: z.string().default("/tmp/attachments").describe(
|
||||||
|
|||||||
+2
-1
@@ -9,7 +9,8 @@ export function registerFolderTools(server: McpServer): void {
|
|||||||
description: "List mailbox folders from the Exchange mailbox.",
|
description: "List mailbox folders from the Exchange mailbox.",
|
||||||
inputSchema: z.object({
|
inputSchema: z.object({
|
||||||
parentFolderId: z.string().default("msgfolderroot").describe(
|
parentFolderId: z.string().default("msgfolderroot").describe(
|
||||||
"Parent folder to list children of. Supports distinguished names (e.g. inbox, calendar)",
|
"Parent folder to list children of."
|
||||||
|
+ " Supports distinguished names (e.g. inbox, calendar)",
|
||||||
),
|
),
|
||||||
recursive: z.boolean().default(false).describe(
|
recursive: z.boolean().default(false).describe(
|
||||||
"If true, recursively traverse all subfolders",
|
"If true, recursively traverse all subfolders",
|
||||||
|
|||||||
+2
-1
@@ -7,7 +7,8 @@ export function registerPeopleTools(server: McpServer): void {
|
|||||||
"find_person",
|
"find_person",
|
||||||
{
|
{
|
||||||
description:
|
description:
|
||||||
"Search for people in the corporate directory (Active Directory) by name, email, or keyword.",
|
"Search for people in the corporate directory (Active Directory)"
|
||||||
|
+ " by name, email, or keyword.",
|
||||||
inputSchema: z.object({
|
inputSchema: z.object({
|
||||||
query: z.string().describe(
|
query: z.string().describe(
|
||||||
"Name, email address, or keyword to search for",
|
"Name, email address, or keyword to search for",
|
||||||
|
|||||||
Reference in New Issue
Block a user