No description
This MCP server connects Claude to Microsoft 365 (email, calendar, OneDrive), GitHub (repos, issues, PRs), a Podcast Management App, and local Claude ...
46const data = await podcastFetch<Record<string, unknown>>(`/episodes/${id}`);// Exploitable if the podcast API server has other endpoints that could be accessed via path traversal. Since the MCP is network-exposed, an attacker can directly call this tool.
104const data = await podcastFetch<{ id: string; title: string }>(`/episodes/${id}`, {
105 method: "PATCH",
106 body: JSON.stringify(updates),
107});// Exploitable if the podcast API server has other endpoints that could be updated via path traversal. Since the MCP is network-exposed, an attacker can directly call this tool.
4function podcastApiUrl(path: string): string {
5 const base = process.env.PODCAST_API_URL?.replace(/\/$/, "") ?? "";
6 return `${base}${path}`;
7}// Exploitable if an attacker can control the PODCAST_API_URL environment variable or inject path traversal characters into the path parameter. Since the MCP is network-exposed, an attacker could potentially influence the path via tool inputs.
56}, async ({ to, subject, body }) => {
57 const token = await getM365Token(["Mail.Send"]);
58 await graph("/me/sendMail", token, {
59 method: "POST",
60 body: JSON.stringify({
61 message: {
62 subject,
63 body: { contentType: "Text", content: body },
64 toRecipients: [{ emailAddress: { address: to } }],
65 },
66 }),
67 });// Exploitable if an attacker can call the confirmed tool directly, bypassing the initial validation. Since the MCP is network-exposed, an attacker can call any tool.
30const [owner, repoName] = repo.split("/");
31const octokit = getOctokit();
32const { data } = await octokit.issues.listForRepo({ owner, repo: repoName, state, per_page: limit });// Exploitable if the GitHub API has endpoints that interpret path traversal sequences. Since the MCP is network-exposed, an attacker can directly call this tool.
63const [owner, repoName] = repo.split("/");
64const octokit = getOctokit();
65const { data } = await octokit.issues.create({ owner, repo: repoName, title, body, labels });// Exploitable if an attacker can influence the repo parameter. Since the MCP is network-exposed, an attacker can directly call these tools.