google-services-mcp 0.1.0-beta.100

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +303 -0
  3. package/dist/auth/config.d.ts +43 -0
  4. package/dist/auth/config.d.ts.map +1 -0
  5. package/dist/auth/config.js +112 -0
  6. package/dist/auth/config.js.map +1 -0
  7. package/dist/auth/manager.d.ts +50 -0
  8. package/dist/auth/manager.d.ts.map +1 -0
  9. package/dist/auth/manager.js +141 -0
  10. package/dist/auth/manager.js.map +1 -0
  11. package/dist/auth/oauth.d.ts +57 -0
  12. package/dist/auth/oauth.d.ts.map +1 -0
  13. package/dist/auth/oauth.js +223 -0
  14. package/dist/auth/oauth.js.map +1 -0
  15. package/dist/auth/store.d.ts +18 -0
  16. package/dist/auth/store.d.ts.map +1 -0
  17. package/dist/auth/store.js +50 -0
  18. package/dist/auth/store.js.map +1 -0
  19. package/dist/cli.d.ts +7 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +137 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/main.d.ts +3 -0
  24. package/dist/main.d.ts.map +1 -0
  25. package/dist/main.js +21 -0
  26. package/dist/main.js.map +1 -0
  27. package/dist/server.d.ts +3 -0
  28. package/dist/server.d.ts.map +1 -0
  29. package/dist/server.js +28 -0
  30. package/dist/server.js.map +1 -0
  31. package/dist/services/calendar.d.ts +77 -0
  32. package/dist/services/calendar.d.ts.map +1 -0
  33. package/dist/services/calendar.js +141 -0
  34. package/dist/services/calendar.js.map +1 -0
  35. package/dist/services/contacts-tasks.d.ts +61 -0
  36. package/dist/services/contacts-tasks.d.ts.map +1 -0
  37. package/dist/services/contacts-tasks.js +106 -0
  38. package/dist/services/contacts-tasks.js.map +1 -0
  39. package/dist/services/docs.d.ts +32 -0
  40. package/dist/services/docs.d.ts.map +1 -0
  41. package/dist/services/docs.js +58 -0
  42. package/dist/services/docs.js.map +1 -0
  43. package/dist/services/drive.d.ts +72 -0
  44. package/dist/services/drive.d.ts.map +1 -0
  45. package/dist/services/drive.js +131 -0
  46. package/dist/services/drive.js.map +1 -0
  47. package/dist/services/forms.d.ts +30 -0
  48. package/dist/services/forms.d.ts.map +1 -0
  49. package/dist/services/forms.js +54 -0
  50. package/dist/services/forms.js.map +1 -0
  51. package/dist/services/gmail.d.ts +159 -0
  52. package/dist/services/gmail.d.ts.map +1 -0
  53. package/dist/services/gmail.js +499 -0
  54. package/dist/services/gmail.js.map +1 -0
  55. package/dist/services/sheets.d.ts +44 -0
  56. package/dist/services/sheets.d.ts.map +1 -0
  57. package/dist/services/sheets.js +53 -0
  58. package/dist/services/sheets.js.map +1 -0
  59. package/dist/services/slides.d.ts +30 -0
  60. package/dist/services/slides.d.ts.map +1 -0
  61. package/dist/services/slides.js +52 -0
  62. package/dist/services/slides.js.map +1 -0
  63. package/dist/services/youtube.d.ts +45 -0
  64. package/dist/services/youtube.d.ts.map +1 -0
  65. package/dist/services/youtube.js +97 -0
  66. package/dist/services/youtube.js.map +1 -0
  67. package/dist/tools/index.d.ts +3 -0
  68. package/dist/tools/index.d.ts.map +1 -0
  69. package/dist/tools/index.js +953 -0
  70. package/dist/tools/index.js.map +1 -0
  71. package/dist/util/result.d.ts +29 -0
  72. package/dist/util/result.d.ts.map +1 -0
  73. package/dist/util/result.js +21 -0
  74. package/dist/util/result.js.map +1 -0
  75. package/package.json +60 -0
@@ -0,0 +1,30 @@
1
+ import type { Auth, slides_v1 } from "googleapis";
2
+ export interface GetPresentationArgs {
3
+ presentationId: string;
4
+ }
5
+ export interface ReplaceAllTextArgs {
6
+ presentationId: string;
7
+ find: string;
8
+ replace: string;
9
+ matchCase?: boolean;
10
+ }
11
+ export declare function getPresentation(client: Auth.OAuth2Client, { presentationId }: GetPresentationArgs): Promise<slides_v1.Schema$Presentation>;
12
+ export declare function getSlidePage(client: Auth.OAuth2Client, { presentationId, pageObjectId }: GetPresentationArgs & {
13
+ pageObjectId: string;
14
+ }): Promise<slides_v1.Schema$Page>;
15
+ export declare function createPresentation(client: Auth.OAuth2Client, { title }: {
16
+ title: string;
17
+ }): Promise<slides_v1.Schema$Presentation>;
18
+ export declare function replaceAllText(client: Auth.OAuth2Client, { presentationId, find, replace, matchCase }: ReplaceAllTextArgs): Promise<slides_v1.Schema$ReplaceAllTextResponse>;
19
+ export declare function createSlide(client: Auth.OAuth2Client, { presentationId }: GetPresentationArgs): Promise<slides_v1.Schema$CreateSlideResponse>;
20
+ export declare function deleteSlide(client: Auth.OAuth2Client, { presentationId, slideObjectId }: GetPresentationArgs & {
21
+ slideObjectId: string;
22
+ }): Promise<{
23
+ deleted: boolean;
24
+ }>;
25
+ export type BatchUpdateArgs = {
26
+ presentationId: string;
27
+ requests: slides_v1.Schema$Request[];
28
+ };
29
+ export declare function batchUpdatePresentation(client: Auth.OAuth2Client, { presentationId, requests }: BatchUpdateArgs): Promise<slides_v1.Schema$BatchUpdatePresentationResponse>;
30
+ //# sourceMappingURL=slides.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slides.d.ts","sourceRoot":"","sources":["../../src/services/slides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGlD,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,cAAc,EAAE,EAAE,mBAAmB,GACtC,OAAO,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAIxC;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,cAAc,EAAE,YAAY,EAAE,EAAE,mBAAmB,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,GAC/E,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAIhC;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAC3B,OAAO,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAIxC;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,SAAgB,EAAE,EAAE,kBAAkB,GACtE,OAAO,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAWlD;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,cAAc,EAAE,EAAE,mBAAmB,GACtC,OAAO,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAS/C;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,cAAc,EAAE,aAAa,EAAE,EAAE,mBAAmB,GAAG;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GACjF,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAO/B;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,SAAS,CAAC,cAAc,EAAE,CAAC;CACtC,CAAC;AAEF,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,eAAe,GAC5C,OAAO,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAI3D"}
@@ -0,0 +1,52 @@
1
+ import { google } from "googleapis";
2
+ export async function getPresentation(client, { presentationId }) {
3
+ const slides = google.slides({ version: "v1", auth: client });
4
+ const res = await slides.presentations.get({ presentationId });
5
+ return res.data;
6
+ }
7
+ export async function getSlidePage(client, { presentationId, pageObjectId }) {
8
+ const slides = google.slides({ version: "v1", auth: client });
9
+ const res = await slides.presentations.pages.get({ presentationId, pageObjectId });
10
+ return res.data;
11
+ }
12
+ export async function createPresentation(client, { title }) {
13
+ const slides = google.slides({ version: "v1", auth: client });
14
+ const res = await slides.presentations.create({ requestBody: { title } });
15
+ return res.data;
16
+ }
17
+ export async function replaceAllText(client, { presentationId, find, replace, matchCase = true }) {
18
+ const slides = google.slides({ version: "v1", auth: client });
19
+ const res = await slides.presentations.batchUpdate({
20
+ presentationId,
21
+ requestBody: {
22
+ requests: [
23
+ { replaceAllText: { containsText: { text: find, matchCase }, replaceText: replace } },
24
+ ],
25
+ },
26
+ });
27
+ return res.data.replies?.[0]?.replaceAllText ?? { occurrencesChanged: 0 };
28
+ }
29
+ export async function createSlide(client, { presentationId }) {
30
+ const slides = google.slides({ version: "v1", auth: client });
31
+ const res = await slides.presentations.batchUpdate({
32
+ presentationId,
33
+ requestBody: {
34
+ requests: [{ createSlide: { slideLayoutReference: { predefinedLayout: "BLANK" } } }],
35
+ },
36
+ });
37
+ return res.data.replies?.[0]?.createSlide ?? { objectId: undefined };
38
+ }
39
+ export async function deleteSlide(client, { presentationId, slideObjectId }) {
40
+ const slides = google.slides({ version: "v1", auth: client });
41
+ await slides.presentations.batchUpdate({
42
+ presentationId,
43
+ requestBody: { requests: [{ deleteObject: { objectId: slideObjectId } }] },
44
+ });
45
+ return { deleted: true };
46
+ }
47
+ export async function batchUpdatePresentation(client, { presentationId, requests }) {
48
+ const slides = google.slides({ version: "v1", auth: client });
49
+ const res = await slides.presentations.batchUpdate({ presentationId, requestBody: { requests } });
50
+ return res.data;
51
+ }
52
+ //# sourceMappingURL=slides.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slides.js","sourceRoot":"","sources":["../../src/services/slides.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { Auth, youtube_v3 } from "googleapis";
2
+ export interface SearchVideosArgs {
3
+ query: string;
4
+ maxResults?: number;
5
+ }
6
+ export interface GetVideoArgs {
7
+ videoId: string;
8
+ }
9
+ export declare function searchVideos(client: Auth.OAuth2Client, { query, maxResults }: SearchVideosArgs): Promise<Array<{
10
+ id: string;
11
+ type: string;
12
+ title?: string;
13
+ channelTitle?: string;
14
+ }>>;
15
+ export declare function getVideo(client: Auth.OAuth2Client, { videoId }: GetVideoArgs): Promise<youtube_v3.Schema$Video | null>;
16
+ export declare function getMyVideos(client: Auth.OAuth2Client, { maxResults }: {
17
+ maxResults?: number;
18
+ }): Promise<{
19
+ uploadsPlaylistId: string | null;
20
+ videos: youtube_v3.Schema$PlaylistItem[];
21
+ }>;
22
+ export declare function listPlaylists(client: Auth.OAuth2Client, { maxResults }: {
23
+ maxResults?: number;
24
+ }): Promise<youtube_v3.Schema$Playlist[]>;
25
+ export declare function createPlaylist(client: Auth.OAuth2Client, { title, description, privacyStatus, }: {
26
+ title: string;
27
+ description?: string;
28
+ privacyStatus?: string;
29
+ }): Promise<youtube_v3.Schema$Playlist>;
30
+ export declare function deletePlaylist(client: Auth.OAuth2Client, { playlistId }: {
31
+ playlistId: string;
32
+ }): Promise<{
33
+ deleted: boolean;
34
+ }>;
35
+ export declare function addVideoToPlaylist(client: Auth.OAuth2Client, { playlistId, videoId }: {
36
+ playlistId: string;
37
+ videoId: string;
38
+ }): Promise<youtube_v3.Schema$PlaylistItem>;
39
+ export declare function listSubscriptions(client: Auth.OAuth2Client, { maxResults }: {
40
+ maxResults?: number;
41
+ }): Promise<Array<{
42
+ title?: string;
43
+ channelId?: string;
44
+ }>>;
45
+ //# sourceMappingURL=youtube.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"youtube.d.ts","sourceRoot":"","sources":["../../src/services/youtube.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGnD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,KAAK,EAAE,UAAe,EAAE,EAAE,gBAAgB,GAC3C,OAAO,CAAC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAoBrF;AAED,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,OAAO,EAAE,EAAE,YAAY,GACxB,OAAO,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,CAOzC;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,UAAe,EAAE,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,OAAO,CAAC;IAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC,mBAAmB,EAAE,CAAA;CAAE,CAAC,CAoBzF;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,UAAe,EAAE,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAQvC;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EACE,KAAK,EACL,WAAW,EACX,aAAkC,GACnC,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACjE,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAUrC;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,UAAU,EAAE,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GACrC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAI/B;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC/D,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,CASzC;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,UAAe,EAAE,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,OAAO,CAAC,KAAK,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAWxD"}
@@ -0,0 +1,97 @@
1
+ import { google } from "googleapis";
2
+ export async function searchVideos(client, { query, maxResults = 10 }) {
3
+ const yt = google.youtube({ version: "v3", auth: client });
4
+ const res = await yt.search.list({
5
+ part: ["snippet"],
6
+ q: query,
7
+ type: ["video"],
8
+ maxResults,
9
+ });
10
+ return (res.data.items ?? []).map((item) => ({
11
+ id: item.id?.videoId ?? item.id?.channelId ?? item.id?.playlistId ?? "",
12
+ type: item.id?.videoId
13
+ ? "video"
14
+ : item.id?.channelId
15
+ ? "channel"
16
+ : item.id?.playlistId
17
+ ? "playlist"
18
+ : "unknown",
19
+ title: item.snippet?.title ?? undefined,
20
+ channelTitle: item.snippet?.channelTitle ?? undefined,
21
+ }));
22
+ }
23
+ export async function getVideo(client, { videoId }) {
24
+ const yt = google.youtube({ version: "v3", auth: client });
25
+ const res = await yt.videos.list({
26
+ part: ["snippet", "contentDetails", "statistics"],
27
+ id: [videoId],
28
+ });
29
+ return res.data.items?.[0] ?? null;
30
+ }
31
+ export async function getMyVideos(client, { maxResults = 25 }) {
32
+ // Find the uploads playlist for the signed-in channel, then list its items.
33
+ const yt = google.youtube({ version: "v3", auth: client });
34
+ const playlists = await yt.playlists.list({
35
+ part: ["snippet"],
36
+ mine: true,
37
+ maxResults: 50,
38
+ });
39
+ const uploadsPlaylist = (playlists.data.items ?? []).find((p) => p.id && p.snippet?.title === "Uploads");
40
+ if (!uploadsPlaylist?.id) {
41
+ return { videos: [], uploadsPlaylistId: null };
42
+ }
43
+ const items = await yt.playlistItems.list({
44
+ part: ["snippet", "contentDetails"],
45
+ playlistId: uploadsPlaylist.id,
46
+ maxResults,
47
+ });
48
+ return { uploadsPlaylistId: uploadsPlaylist.id, videos: items.data.items ?? [] };
49
+ }
50
+ export async function listPlaylists(client, { maxResults = 25 }) {
51
+ const yt = google.youtube({ version: "v3", auth: client });
52
+ const res = await yt.playlists.list({
53
+ part: ["snippet", "contentDetails"],
54
+ mine: true,
55
+ maxResults,
56
+ });
57
+ return res.data.items ?? [];
58
+ }
59
+ export async function createPlaylist(client, { title, description, privacyStatus = "private", }) {
60
+ const yt = google.youtube({ version: "v3", auth: client });
61
+ const res = await yt.playlists.insert({
62
+ part: ["snippet", "status"],
63
+ requestBody: {
64
+ snippet: { title, description },
65
+ status: { privacyStatus },
66
+ },
67
+ });
68
+ return res.data;
69
+ }
70
+ export async function deletePlaylist(client, { playlistId }) {
71
+ const yt = google.youtube({ version: "v3", auth: client });
72
+ await yt.playlists.delete({ id: playlistId });
73
+ return { deleted: true };
74
+ }
75
+ export async function addVideoToPlaylist(client, { playlistId, videoId }) {
76
+ const yt = google.youtube({ version: "v3", auth: client });
77
+ const res = await yt.playlistItems.insert({
78
+ part: ["snippet"],
79
+ requestBody: {
80
+ snippet: { playlistId, resourceId: { kind: "youtube#video", videoId } },
81
+ },
82
+ });
83
+ return res.data;
84
+ }
85
+ export async function listSubscriptions(client, { maxResults = 50 }) {
86
+ const yt = google.youtube({ version: "v3", auth: client });
87
+ const res = await yt.subscriptions.list({
88
+ part: ["snippet"],
89
+ mine: true,
90
+ maxResults,
91
+ });
92
+ return (res.data.items ?? []).map((item) => ({
93
+ title: item.snippet?.title ?? undefined,
94
+ channelId: item.snippet?.resourceId?.channelId ?? undefined,
95
+ }));
96
+ }
97
+ //# sourceMappingURL=youtube.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"youtube.js","sourceRoot":"","sources":["../../src/services/youtube.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerTools(server: McpServer): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA0GzE,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA85CrD"}