Skip to main content
Glama
DynamicEndpoints

BOD-25-01-CSA-Microsoft-Policy-MCP

get_policy_status

Check current compliance status of CISA M365 security policies to verify adherence to BOD 25-01 requirements for Microsoft 365 cloud services.

Instructions

Get current status of all CISA M365 security policies

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • Handler function for get_policy_status in Power Platform server that returns a mock status of security policies (TODO: real implementation).
    private async getPolicyStatus() {
      // TODO: Implement policy status check logic
      return {
        content: [
          {
            type: 'text',
            text: JSON.stringify({
              environmentCreation: 'Restricted to admins',
              dlpPolicy: 'Configured',
              tenantIsolation: 'Enabled',
            }, null, 2),
          },
        ],
      };
    }
  • Handler for get_policy_status in Exchange Online server that queries Microsoft Graph API for various Exchange policy statuses and returns them in JSON.
    private async getPolicyStatus() {
      try {
        if (!this.graphClient) {
          throw new Error('Graph client not initialized');
        }
    
        const results = {
          policies: EXO_POLICIES,
          currentStatus: {
            externalForwarding: await this.graphClient.api('/admin/exchangeSettings/externalForwarding').get(),
            spfPolicies: await this.graphClient.api('/admin/domains/spfRecords').get(),
            dmarcPolicies: await this.graphClient.api('/admin/domains/dmarcRecords').get(),
            smtpAuth: await this.graphClient.api('/admin/exchangeSettings/smtpAuth').get(),
            sharingPolicies: await this.graphClient.api('/admin/exchangeSettings/sharingPolicies').get(),
            externalSenderWarning: await this.graphClient.api('/admin/exchangeSettings/externalSenderWarning').get(),
            mailboxAudit: await this.graphClient.api('/admin/exchangeSettings/mailboxAudit').get()
          }
        };
    
        return {
          content: [
            {
              type: 'text',
              text: JSON.stringify(results, null, 2)
            }
          ]
        };
      } catch (error) {
        const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
        throw new McpError(
          ErrorCode.InternalError,
          `Failed to get policy status: ${errorMessage}`
        );
      }
    }
  • Handler for get_policy_status in Defender server that fetches current Defender policy statuses via Microsoft Graph API.
    private async getPolicyStatus() {
      try {
        if (!this.graphClient) {
          throw new Error('Graph client not initialized');
        }
    
        const results = {
          policies: DEFENDER_POLICIES,
          currentStatus: {
            securityPolicies: await this.graphClient.api('/security/securityPresetPolicies').get(),
            piiProtection: await this.graphClient.api('/security/sensitiveTypes').get(),
            auditConfig: await this.graphClient.api('/security/auditLogs/config').get()
          }
        };
    
        return {
          content: [
            {
              type: 'text',
              text: JSON.stringify(results, null, 2)
            }
          ]
        };
      } catch (error) {
        const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
        throw new McpError(
          ErrorCode.InternalError,
          `Failed to get policy status: ${errorMessage}`
        );
      }
    }
  • Handler for get_policy_status in Teams server that queries multiple Teams policies via Graph API and computes their compliance status.
    private async getPolicyStatus() {
      try {
        // Get current settings using Microsoft Graph API
        const [
          meetingPolicy,
          federationSettings,
          externalUserSettings,
          emailSettings,
        ] = await Promise.all([
          this.graphClient.api('/policies/teamsAppSetupPolicies/global').get(),
          this.graphClient.api('/policies/teamsFederationSettings').get(),
          this.graphClient.api('/policies/teamsExternalUserSettings').get(),
          this.graphClient.api('/policies/teamsEmailSettings').get(),
        ]);
    
        const status = {
          anonymousMeetings: {
            disabled: !meetingPolicy.allowAnonymousUsersToStartMeeting,
            compliant: !meetingPolicy.allowAnonymousUsersToStartMeeting,
          },
          externalAccess: {
            allowedDomains: federationSettings.allowedDomains,
            compliant: federationSettings.allowedDomains.length > 0 &&
                      !federationSettings.allowTeamsConsumer,
          },
          unmanagedUsers: {
            disabled: !externalUserSettings.allowUnmanagedUsersToStartChat,
            compliant: !externalUserSettings.allowUnmanagedUsersToStartChat,
          },
          skypeUsers: {
            blocked: !federationSettings.allowSkypeUsers,
            compliant: !federationSettings.allowSkypeUsers,
          },
          emailIntegration: {
            disabled: !emailSettings.allowEmailIntegration,
            compliant: !emailSettings.allowEmailIntegration,
          },
        };
    
        return {
          content: [
            {
              type: 'text',
              text: JSON.stringify(status, null, 2),
            },
          ],
        };
      } catch (error: unknown) {
        throw new McpError(
          ErrorCode.InternalError,
          `Failed to get policy status: ${error instanceof Error ? error.message : 'Unknown error'}`
        );
      }
    }

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/DynamicEndpoints/Automated-BOD-25-01-CISA-Microsoft-Policies-MCP'

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