Upload 10 files
Browse files- README.md +85 -10
- code-diagram.svg +208 -0
- company-logos.svg +64 -0
- deploy.sh +39 -0
- favicon.svg +32 -0
- index.html +315 -114
- mcp-diagram.svg +105 -0
- script.js +71 -0
- security-diagram.svg +115 -0
- styles.css +489 -0
README.md
CHANGED
@@ -1,10 +1,85 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Model Context Protocol (MCP) Website
|
2 |
+
|
3 |
+
This is a comprehensive, technically accurate website about the Model Context Protocol (MCP), the open standard for connecting AI models to external data sources and tools.
|
4 |
+
|
5 |
+
## Website Contents
|
6 |
+
|
7 |
+
- `index.html` - The main HTML structure of the website
|
8 |
+
- `styles.css` - CSS styling for the website
|
9 |
+
- `script.js` - JavaScript for interactive elements
|
10 |
+
- `README.md` - This file with deployment instructions
|
11 |
+
|
12 |
+
## Technical Details
|
13 |
+
|
14 |
+
This website contains factual information about the Model Context Protocol, including:
|
15 |
+
|
16 |
+
- Overview and core purpose of MCP
|
17 |
+
- Technical architecture and implementation details
|
18 |
+
- Industry adoption across major AI companies
|
19 |
+
- Security considerations and best practices
|
20 |
+
- Links to official resources and documentation
|
21 |
+
|
22 |
+
## Deployment Instructions
|
23 |
+
|
24 |
+
### Local Testing
|
25 |
+
|
26 |
+
1. Clone or download this repository to your local machine
|
27 |
+
2. Open the `index.html` file in a web browser to view the website locally
|
28 |
+
|
29 |
+
### Web Hosting Deployment
|
30 |
+
|
31 |
+
#### Standard Web Hosting:
|
32 |
+
|
33 |
+
1. Upload all files to your web hosting provider via FTP or their control panel
|
34 |
+
2. Ensure the files maintain their directory structure
|
35 |
+
3. Point your domain to the directory containing these files
|
36 |
+
|
37 |
+
#### GitHub Pages:
|
38 |
+
|
39 |
+
1. Create a new GitHub repository
|
40 |
+
2. Push these files to the repository
|
41 |
+
3. Go to repository Settings > Pages
|
42 |
+
4. Select the main branch as the source
|
43 |
+
5. Your site will be published at `https://[username].github.io/[repository-name]`
|
44 |
+
|
45 |
+
#### Vercel or Netlify:
|
46 |
+
|
47 |
+
1. Connect your GitHub repository to Vercel or Netlify
|
48 |
+
2. Configure the build settings (not needed for simple static sites)
|
49 |
+
3. Deploy the site
|
50 |
+
4. Configure your custom domain if desired
|
51 |
+
|
52 |
+
## Customization
|
53 |
+
|
54 |
+
### Google Analytics
|
55 |
+
|
56 |
+
To add Google Analytics:
|
57 |
+
|
58 |
+
1. Open `index.html`
|
59 |
+
2. Locate the Google Analytics script section in the `<head>`
|
60 |
+
3. Replace `G-XXXXXXXXXX` with your Google Analytics tracking ID
|
61 |
+
|
62 |
+
### Custom Domain
|
63 |
+
|
64 |
+
If you're using a custom domain:
|
65 |
+
|
66 |
+
1. Update all absolute URLs in the website
|
67 |
+
2. Update the Open Graph and meta tags with your domain information
|
68 |
+
3. Configure your DNS settings according to your hosting provider's instructions
|
69 |
+
|
70 |
+
## SEO Optimization
|
71 |
+
|
72 |
+
The website is already optimized for search engines with:
|
73 |
+
|
74 |
+
- Semantic HTML structure
|
75 |
+
- Proper meta tags in the head section
|
76 |
+
- Descriptive page titles and headings
|
77 |
+
- Mobile-responsive design
|
78 |
+
- Fast loading time
|
79 |
+
- Proper element hierarchy
|
80 |
+
|
81 |
+
## License and Attribution
|
82 |
+
|
83 |
+
This website template is provided for educational purposes. All references to companies, organizations, and technologies are based on publicly available information.
|
84 |
+
|
85 |
+
The content about the Model Context Protocol is factual and based on public sources. When deploying this website, ensure you comply with all applicable regulations regarding factual representation of technical information.
|
code-diagram.svg
ADDED
|
company-logos.svg
ADDED
|
deploy.sh
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/bin/bash
|
2 |
+
# MCP Website Deployment Script
|
3 |
+
|
4 |
+
echo "MCP Website Deployment Tool"
|
5 |
+
echo "==========================="
|
6 |
+
echo
|
7 |
+
|
8 |
+
# Check for dependencies
|
9 |
+
command -v zip >/dev/null 2>&1 || { echo "Error: zip is required but not installed. Aborting."; exit 1; }
|
10 |
+
|
11 |
+
# Create a deployment package
|
12 |
+
echo "Creating deployment package..."
|
13 |
+
zip -r mcp-website.zip *.html *.css *.js *.svg README.md
|
14 |
+
|
15 |
+
echo "Deployment package created: mcp-website.zip"
|
16 |
+
echo
|
17 |
+
|
18 |
+
# Print deployment options
|
19 |
+
echo "Deployment Options:"
|
20 |
+
echo "------------------"
|
21 |
+
echo "1. Standard Web Hosting:"
|
22 |
+
echo " - Upload mcp-website.zip to your web hosting provider"
|
23 |
+
echo " - Extract the files maintaining directory structure"
|
24 |
+
echo
|
25 |
+
echo "2. GitHub Pages Deployment:"
|
26 |
+
echo " - Create a new GitHub repository"
|
27 |
+
echo " - Push these files to the repository"
|
28 |
+
echo " - Enable GitHub Pages in repository settings"
|
29 |
+
echo
|
30 |
+
echo "3. Vercel or Netlify Deployment:"
|
31 |
+
echo " - Connect your GitHub repository to Vercel or Netlify"
|
32 |
+
echo " - Configure build settings (not needed for this static site)"
|
33 |
+
echo " - Deploy the site"
|
34 |
+
echo
|
35 |
+
echo "For all options, you can use your custom domain by configuring DNS settings"
|
36 |
+
echo "according to your hosting provider's instructions."
|
37 |
+
echo
|
38 |
+
|
39 |
+
echo "Deployment package is ready!"
|
favicon.svg
ADDED
|
index.html
CHANGED
@@ -3,152 +3,353 @@
|
|
3 |
<head>
|
4 |
<meta charset="UTF-8">
|
5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 |
-
<title>Model Context Protocol (MCP) -
|
7 |
-
<meta name="description" content="
|
8 |
-
<
|
9 |
-
<link rel="
|
10 |
-
<link rel="
|
11 |
-
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
12 |
</head>
|
13 |
<body>
|
14 |
<header>
|
15 |
-
<div class="container
|
16 |
-
<
|
|
|
17 |
<nav>
|
18 |
<ul>
|
19 |
-
<li><a href="
|
20 |
-
<li><a href="
|
21 |
-
<li><a href="
|
22 |
-
<li><a href="
|
23 |
-
<li><a href="
|
24 |
-
<li><a href="
|
25 |
-
<li><a href="faq.html">FAQ</a></li>
|
26 |
</ul>
|
27 |
</nav>
|
28 |
</div>
|
29 |
</header>
|
30 |
|
31 |
-
<section class="
|
32 |
-
<
|
33 |
-
|
34 |
-
<p>
|
35 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
</div>
|
37 |
</section>
|
38 |
|
39 |
-
<
|
40 |
-
<
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
<p>
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
<p>Connect any AI model to any data source or tool using a standardized protocol, eliminating the need for custom integrations.</p>
|
57 |
-
</div>
|
58 |
-
<div class="card">
|
59 |
-
<div class="card-icon">🔒</div>
|
60 |
-
<h3>Secure Architecture</h3>
|
61 |
-
<p>Built with security in mind - data sources control access to their information, and there's no need to share API keys with LLM providers.</p>
|
62 |
-
</div>
|
63 |
-
<div class="card">
|
64 |
-
<div class="card-icon">🧩</div>
|
65 |
-
<h3>Tool Integration</h3>
|
66 |
-
<p>Enable AI models to use external tools and services through a standardized interface for actions like file operations, API calls, and more.</p>
|
67 |
-
</div>
|
68 |
-
<div class="card">
|
69 |
-
<div class="card-icon">🌐</div>
|
70 |
-
<h3>Open Standard</h3>
|
71 |
-
<p>As an open protocol, MCP can be implemented by any organization or developer, fostering a collaborative ecosystem.</p>
|
72 |
-
</div>
|
73 |
</div>
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
<
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
</
|
87 |
-
<
|
88 |
-
<
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
96 |
});
|
97 |
|
98 |
-
//
|
99 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
100 |
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
106 |
</div>
|
107 |
-
|
|
|
|
|
|
|
|
|
108 |
|
109 |
-
<
|
110 |
-
|
111 |
-
<
|
112 |
-
|
113 |
-
</
|
114 |
-
<
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
</main>
|
119 |
|
120 |
-
<
|
121 |
-
<
|
122 |
-
|
123 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
124 |
<ul>
|
125 |
-
<li><a href="https://
|
126 |
-
<li><a href="https://
|
127 |
-
<li><a href="https://
|
|
|
128 |
</ul>
|
129 |
</div>
|
130 |
-
<div>
|
131 |
-
<
|
132 |
<ul>
|
133 |
-
<li><a href="
|
134 |
-
<li><a href="
|
135 |
-
<li><a href="
|
136 |
-
<li><a href="
|
137 |
</ul>
|
138 |
</div>
|
139 |
-
<div>
|
140 |
-
<
|
141 |
<ul>
|
142 |
-
<li><a href="https://
|
143 |
-
<li><a href="https://
|
|
|
144 |
</ul>
|
145 |
</div>
|
146 |
</div>
|
147 |
-
|
148 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
149 |
</div>
|
150 |
</footer>
|
151 |
|
152 |
-
<script src="
|
153 |
</body>
|
154 |
</html>
|
|
|
3 |
<head>
|
4 |
<meta charset="UTF-8">
|
5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 |
+
<title>Model Context Protocol (MCP) - The Universal Standard for AI Integration</title>
|
7 |
+
<meta name="description" content="Comprehensive technical guide to the Model Context Protocol (MCP), the open standard for connecting AI models to external data sources and tools.">
|
8 |
+
<meta name="keywords" content="Model Context Protocol, MCP, AI integration, Anthropic, OpenAI, Google, Microsoft, AI tools, LLM connectivity, JSON-RPC">
|
9 |
+
<link rel="stylesheet" href="styles.css">
|
10 |
+
<link rel="icon" href="favicon.svg" type="image/svg+xml">
|
|
|
11 |
</head>
|
12 |
<body>
|
13 |
<header>
|
14 |
+
<div class="container">
|
15 |
+
<h1>Model Context Protocol (MCP)</h1>
|
16 |
+
<p class="tagline">The Universal Standard for AI Integration</p>
|
17 |
<nav>
|
18 |
<ul>
|
19 |
+
<li><a href="#overview">Overview</a></li>
|
20 |
+
<li><a href="#architecture">Architecture</a></li>
|
21 |
+
<li><a href="#implementation">Implementation</a></li>
|
22 |
+
<li><a href="#adoption">Industry Adoption</a></li>
|
23 |
+
<li><a href="#security">Security</a></li>
|
24 |
+
<li><a href="#resources">Resources</a></li>
|
|
|
25 |
</ul>
|
26 |
</nav>
|
27 |
</div>
|
28 |
</header>
|
29 |
|
30 |
+
<section id="overview" class="container">
|
31 |
+
<h2>What is the Model Context Protocol?</h2>
|
32 |
+
<div class="intro-box">
|
33 |
+
<p>The Model Context Protocol (MCP) is an open standard created by Anthropic in November 2024 that solves the fundamental problem of connecting AI models to external data sources and tools. Often described as the <strong>"USB-C port for AI applications,"</strong> MCP standardizes how AI systems access real-world information and functionality beyond their training data.</p>
|
34 |
+
</div>
|
35 |
+
|
36 |
+
<div class="two-column">
|
37 |
+
<div class="column">
|
38 |
+
<h3>The Problem MCP Solves</h3>
|
39 |
+
<p>Even the most sophisticated AI models remain isolated from real-time data—trapped behind information silos and legacy systems. MCP transforms what would be an "M×N integration problem" (where M applications must independently connect to N data sources) into a simpler "M+N" problem through a universal interface.</p>
|
40 |
+
|
41 |
+
<p>Without MCP, developers face:</p>
|
42 |
+
<ul>
|
43 |
+
<li>Building custom integrations for each data source</li>
|
44 |
+
<li>Managing inconsistent implementations across AI platforms</li>
|
45 |
+
<li>Reimplementing similar functionality for each AI service</li>
|
46 |
+
</ul>
|
47 |
+
</div>
|
48 |
+
<div class="column">
|
49 |
+
<h3>Key Capabilities</h3>
|
50 |
+
<p>MCP provides three primary capabilities:</p>
|
51 |
+
<ul>
|
52 |
+
<li><strong>Tools:</strong> Executable functions that models can invoke (similar to function calling)</li>
|
53 |
+
<li><strong>Resources:</strong> Read-only data sources that models can query</li>
|
54 |
+
<li><strong>Prompts:</strong> Pre-defined templates to optimize interactions</li>
|
55 |
+
</ul>
|
56 |
+
<p>These capabilities enable AI models to seamlessly interact with databases, APIs, local files, and other systems while maintaining a consistent implementation pattern.</p>
|
57 |
+
</div>
|
58 |
+
</div>
|
59 |
+
|
60 |
+
<div class="quote-box">
|
61 |
+
<blockquote>
|
62 |
+
"MCP addresses a fundamental challenge facing AI systems today: even the most sophisticated models remain isolated from real-time data—trapped behind information silos and legacy systems."
|
63 |
+
</blockquote>
|
64 |
+
<cite>— <a href="https://www.anthropic.com/news/model-context-protocol" target="_blank">Anthropic's MCP Announcement</a></cite>
|
65 |
</div>
|
66 |
</section>
|
67 |
|
68 |
+
<section id="architecture" class="container alt-bg">
|
69 |
+
<h2>Technical Architecture</h2>
|
70 |
+
<p>MCP follows a client-server architecture with well-defined components and communication patterns.</p>
|
71 |
+
|
72 |
+
<div class="arch-diagram">
|
73 |
+
<img src="mcp-diagram.svg" alt="MCP Client-Server Architecture Diagram" width="800" height="400">
|
74 |
+
<p class="caption">MCP Client-Server Architecture</p>
|
75 |
+
</div>
|
76 |
+
|
77 |
+
<div class="components">
|
78 |
+
<div class="component">
|
79 |
+
<h3>MCP Hosts</h3>
|
80 |
+
<p>AI applications like Claude Desktop that need external data access</p>
|
81 |
+
</div>
|
82 |
+
<div class="component">
|
83 |
+
<h3>MCP Clients</h3>
|
84 |
+
<p>Protocol clients that maintain connections with servers</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
</div>
|
86 |
+
<div class="component">
|
87 |
+
<h3>MCP Servers</h3>
|
88 |
+
<p>Lightweight programs exposing specific capabilities</p>
|
89 |
+
</div>
|
90 |
+
<div class="component">
|
91 |
+
<h3>Data Sources</h3>
|
92 |
+
<p>Local or remote systems that servers can access</p>
|
93 |
+
</div>
|
94 |
+
</div>
|
95 |
+
|
96 |
+
<h3>Protocol Details</h3>
|
97 |
+
<ul class="tech-details">
|
98 |
+
<li><strong>Message Protocol:</strong> JSON-RPC 2.0</li>
|
99 |
+
<li><strong>Transport Mechanisms:</strong>
|
100 |
+
<ul>
|
101 |
+
<li>STDIO: For local server communication (running in subprocess)</li>
|
102 |
+
<li>Streamable HTTP: For remote server communication (replaced earlier HTTP+SSE)</li>
|
103 |
+
</ul>
|
104 |
+
</li>
|
105 |
+
<li><strong>Security Model:</strong>
|
106 |
+
<ul>
|
107 |
+
<li>Isolation: Each client maintains a 1:1 relationship with a server</li>
|
108 |
+
<li>Access Control: Servers define capabilities and access boundaries</li>
|
109 |
+
<li>OAuth 2.1 Support: Required for authenticating remote HTTP servers (added March 2025)</li>
|
110 |
+
</ul>
|
111 |
+
</li>
|
112 |
+
</ul>
|
113 |
+
|
114 |
+
<div class="tech-note">
|
115 |
+
<p><strong>Note:</strong> MCP draws significant inspiration from Microsoft's Language Server Protocol (LSP), adapting many of its concepts to the AI domain while building on proven foundations like JSON-RPC 2.0.</p>
|
116 |
+
</div>
|
117 |
+
</section>
|
118 |
+
|
119 |
+
<section id="implementation" class="container">
|
120 |
+
<h2>Implementation Guide</h2>
|
121 |
+
|
122 |
+
<h3>Supported Languages</h3>
|
123 |
+
<p>MCP provides official SDK support for multiple languages:</p>
|
124 |
+
<div class="language-grid">
|
125 |
+
<div class="language">TypeScript/JavaScript</div>
|
126 |
+
<div class="language">Python</div>
|
127 |
+
<div class="language">Java</div>
|
128 |
+
<div class="language">Kotlin</div>
|
129 |
+
<div class="language">C#</div>
|
130 |
+
<div class="language">Swift</div>
|
131 |
+
<div class="language">Rust</div>
|
132 |
+
</div>
|
133 |
+
|
134 |
+
<h3>TypeScript Example</h3>
|
135 |
+
<div class="diagram-container">
|
136 |
+
<img src="code-diagram.svg" alt="MCP Server Implementation in TypeScript" width="800" height="420" class="code-diagram">
|
137 |
+
</div>
|
138 |
+
<div class="code-block">
|
139 |
+
<pre><code>import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
140 |
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
141 |
+
import { z } from "zod";
|
142 |
+
|
143 |
+
// Create an MCP server
|
144 |
+
const server = new McpServer({
|
145 |
+
name: "Demo",
|
146 |
+
version: "1.0.0"
|
147 |
});
|
148 |
|
149 |
+
// Add a tool with Zod schema validation
|
150 |
+
server.tool(
|
151 |
+
"add",
|
152 |
+
{ a: z.number(), b: z.number() },
|
153 |
+
async ({ a, b }) => ({
|
154 |
+
content: [{ type: "text", text: String(a + b) }]
|
155 |
+
})
|
156 |
+
);
|
157 |
+
|
158 |
+
// Connect using STDIO transport
|
159 |
+
const transport = new StdioServerTransport();
|
160 |
+
await server.connect(transport);</code></pre>
|
161 |
+
</div>
|
162 |
+
|
163 |
+
<h3>Best Practices</h3>
|
164 |
+
<div class="best-practices">
|
165 |
+
<div class="practice">
|
166 |
+
<h4>Tool Design</h4>
|
167 |
+
<ul>
|
168 |
+
<li>Create goal-oriented tools at the right abstraction level</li>
|
169 |
+
<li>Provide clear, descriptive names and documentation</li>
|
170 |
+
<li>Avoid exposing low-level functions directly</li>
|
171 |
+
</ul>
|
172 |
+
</div>
|
173 |
+
<div class="practice">
|
174 |
+
<h4>Security</h4>
|
175 |
+
<ul>
|
176 |
+
<li>Implement OAuth 2.1 for remote server authentication</li>
|
177 |
+
<li>Apply the principle of least privilege to tool permissions</li>
|
178 |
+
<li>Rigorously validate all incoming messages</li>
|
179 |
+
<li>Implement user approval for destructive operations</li>
|
180 |
+
</ul>
|
181 |
+
</div>
|
182 |
+
<div class="practice">
|
183 |
+
<h4>Performance</h4>
|
184 |
+
<ul>
|
185 |
+
<li>Use caching for resource results to reduce redundant operations</li>
|
186 |
+
<li>Prefer Streamable HTTP for remote servers</li>
|
187 |
+
<li>Be mindful of context window sizes when returning large text responses</li>
|
188 |
+
</ul>
|
189 |
+
</div>
|
190 |
+
</div>
|
191 |
+
|
192 |
+
<div class="resource-link">
|
193 |
+
<a href="https://github.com/modelcontextprotocol/typescript-sdk" target="_blank" class="btn">Official TypeScript SDK</a>
|
194 |
+
<a href="https://github.com/modelcontextprotocol/python-sdk" target="_blank" class="btn">Official Python SDK</a>
|
195 |
+
<a href="https://modelcontextprotocol.io/specification/2025-03-26" target="_blank" class="btn">Full Specification</a>
|
196 |
+
</div>
|
197 |
+
</section>
|
198 |
+
|
199 |
+
<section id="adoption" class="container alt-bg">
|
200 |
+
<h2>Industry Adoption</h2>
|
201 |
+
<p>Since its introduction, MCP has experienced remarkable adoption across the AI ecosystem, positioning it as the de facto standard for connecting AI models to external tools and data sources.</p>
|
202 |
|
203 |
+
<div class="adoption-grid">
|
204 |
+
<img src="company-logos.svg" alt="Major Companies Supporting MCP" width="800" height="260" class="company-diagram">
|
205 |
+
</div>
|
206 |
+
|
207 |
+
<h3>Ecosystem Growth</h3>
|
208 |
+
<div class="stats">
|
209 |
+
<div class="stat">
|
210 |
+
<div class="stat-number">250+</div>
|
211 |
+
<div class="stat-label">Distinct MCP Servers Available</div>
|
212 |
+
</div>
|
213 |
+
<div class="stat">
|
214 |
+
<div class="stat-number">1,000+</div>
|
215 |
+
<div class="stat-label">Community-Built Connectors</div>
|
216 |
</div>
|
217 |
+
<div class="stat">
|
218 |
+
<div class="stat-number">7</div>
|
219 |
+
<div class="stat-label">Official SDK Languages</div>
|
220 |
+
</div>
|
221 |
+
</div>
|
222 |
|
223 |
+
<h3>Development Tools with MCP Support</h3>
|
224 |
+
<div class="tool-list">
|
225 |
+
<div class="tool">Zed</div>
|
226 |
+
<div class="tool">Replit</div>
|
227 |
+
<div class="tool">Codeium</div>
|
228 |
+
<div class="tool">Sourcegraph</div>
|
229 |
+
<div class="tool">Cursor</div>
|
230 |
+
</div>
|
231 |
+
</section>
|
|
|
232 |
|
233 |
+
<section id="security" class="container">
|
234 |
+
<h2>Security Considerations</h2>
|
235 |
+
<p>While MCP offers significant benefits for AI capabilities and alignment, security researchers have identified several critical vulnerabilities that must be addressed as the protocol matures.</p>
|
236 |
+
|
237 |
+
<div class="security-diagram">
|
238 |
+
<img src="security-diagram.svg" alt="MCP Security Vulnerabilities and Mitigations" width="800" height="400">
|
239 |
+
</div>
|
240 |
+
|
241 |
+
<div class="security-warning">
|
242 |
+
<h3>Known Vulnerabilities</h3>
|
243 |
+
<ul>
|
244 |
+
<li><strong>Tool poisoning attacks:</strong> Malicious instructions embedded in tool descriptions can cause AI systems to leak sensitive data</li>
|
245 |
+
<li><strong>MCP rug pulls:</strong> Servers can change their tool definitions after installation, potentially introducing malicious functionality</li>
|
246 |
+
<li><strong>Cross-server tool shadowing:</strong> Malicious servers can override legitimate tools from other servers</li>
|
247 |
+
</ul>
|
248 |
+
</div>
|
249 |
+
|
250 |
+
<h3>Mitigation Strategies</h3>
|
251 |
+
<div class="mitigation-grid">
|
252 |
+
<div class="strategy">
|
253 |
+
<h4>Tool Verification</h4>
|
254 |
+
<p>Implement cryptographic verification of tool definitions and pin trusted tool versions</p>
|
255 |
+
</div>
|
256 |
+
<div class="strategy">
|
257 |
+
<h4>UI Transparency</h4>
|
258 |
+
<p>Improve visibility into tool operations and show tool descriptions to users</p>
|
259 |
+
</div>
|
260 |
+
<div class="strategy">
|
261 |
+
<h4>Cross-Origin Protections</h4>
|
262 |
+
<p>Implement strict protections against cross-origin resource sharing vulnerabilities</p>
|
263 |
+
</div>
|
264 |
+
<div class="strategy">
|
265 |
+
<h4>Security Scanning</h4>
|
266 |
+
<p>Develop automated tools to scan MCP servers for potential security issues</p>
|
267 |
+
</div>
|
268 |
+
</div>
|
269 |
+
|
270 |
+
<div class="security-resources">
|
271 |
+
<h3>Security Research</h3>
|
272 |
+
<ul>
|
273 |
+
<li><a href="https://arxiv.org/abs/2504.03767" target="_blank">MCP Safety Audit: LLMs with the Model Context Protocol Allow Major Security Exploits</a></li>
|
274 |
+
<li><a href="https://www.wiz.io/blog/mcp-security-research-briefing" target="_blank">MCP and LLM Security Research Briefing</a></li>
|
275 |
+
<li><a href="https://github.com/slowmist/MCP-Security-Checklist" target="_blank">SlowMist MCP Security Checklist</a></li>
|
276 |
+
</ul>
|
277 |
+
</div>
|
278 |
+
</section>
|
279 |
+
|
280 |
+
<section id="resources" class="container alt-bg">
|
281 |
+
<h2>Additional Resources</h2>
|
282 |
+
|
283 |
+
<div class="resource-categories">
|
284 |
+
<div class="resource-category">
|
285 |
+
<h3>Official Resources</h3>
|
286 |
<ul>
|
287 |
+
<li><a href="https://www.anthropic.com/news/model-context-protocol" target="_blank">Anthropic's MCP Announcement</a></li>
|
288 |
+
<li><a href="https://modelcontextprotocol.io/specification/2025-03-26" target="_blank">MCP Specification (March 2025)</a></li>
|
289 |
+
<li><a href="https://github.com/modelcontextprotocol" target="_blank">Official GitHub Organization</a></li>
|
290 |
+
<li><a href="https://modelcontextprotocol.io/development/roadmap" target="_blank">MCP Development Roadmap</a></li>
|
291 |
</ul>
|
292 |
</div>
|
293 |
+
<div class="resource-category">
|
294 |
+
<h3>Implementation Guides</h3>
|
295 |
<ul>
|
296 |
+
<li><a href="https://github.com/cyanheads/model-context-protocol-resources" target="_blank">Comprehensive MCP Resources</a></li>
|
297 |
+
<li><a href="https://www.philschmid.de/mcp-introduction" target="_blank">MCP Technical Overview</a></li>
|
298 |
+
<li><a href="https://dev.to/tak089/what-is-model-context-protocol-mcp-and-why-is-it-trending-in-2025-14lc" target="_blank">MCP Trends in 2025</a></li>
|
299 |
+
<li><a href="https://github.com/ivo-toby/mcp-openapi-server" target="_blank">OpenAPI to MCP Server Converter</a></li>
|
300 |
</ul>
|
301 |
</div>
|
302 |
+
<div class="resource-category">
|
303 |
+
<h3>Comparison with Alternatives</h3>
|
304 |
<ul>
|
305 |
+
<li><a href="https://mcpa2a.com/" target="_blank">MCP vs A2A Protocol Comparison</a></li>
|
306 |
+
<li><a href="https://blog.fotiecodes.com/function-calling-vs-model-context-protocol-mcp-what-you-need-to-know-cm88zfwik000108ji0a1d54fc" target="_blank">Function Calling vs. MCP</a></li>
|
307 |
+
<li><a href="https://norahsakal.com/blog/mcp-vs-api-model-context-protocol-explained/" target="_blank">MCP vs Traditional APIs</a></li>
|
308 |
</ul>
|
309 |
</div>
|
310 |
</div>
|
311 |
+
|
312 |
+
<div class="newsletter">
|
313 |
+
<h3>Stay Updated on MCP Developments</h3>
|
314 |
+
<p>Subscribe to our newsletter for the latest MCP news, implementation guides, and security updates.</p>
|
315 |
+
<form id="newsletter-form">
|
316 |
+
<input type="email" placeholder="Your email address" required>
|
317 |
+
<button type="submit" class="btn">Subscribe</button>
|
318 |
+
</form>
|
319 |
+
</div>
|
320 |
+
</section>
|
321 |
+
|
322 |
+
<footer>
|
323 |
+
<div class="container">
|
324 |
+
<div class="footer-content">
|
325 |
+
<div class="footer-section">
|
326 |
+
<h3>Model Context Protocol (MCP)</h3>
|
327 |
+
<p>The universal standard for connecting AI models to external data sources and tools.</p>
|
328 |
+
</div>
|
329 |
+
<div class="footer-section">
|
330 |
+
<h3>Important Links</h3>
|
331 |
+
<ul>
|
332 |
+
<li><a href="https://www.anthropic.com/news/model-context-protocol" target="_blank">Official MCP Site</a></li>
|
333 |
+
<li><a href="https://github.com/modelcontextprotocol" target="_blank">GitHub</a></li>
|
334 |
+
<li><a href="https://modelcontextprotocol.io/specification/2025-03-26" target="_blank">Specification</a></li>
|
335 |
+
</ul>
|
336 |
+
</div>
|
337 |
+
<div class="footer-section">
|
338 |
+
<h3>Connect</h3>
|
339 |
+
<ul class="social-links">
|
340 |
+
<li><a href="#" target="_blank">Twitter</a></li>
|
341 |
+
<li><a href="#" target="_blank">LinkedIn</a></li>
|
342 |
+
<li><a href="#" target="_blank">GitHub</a></li>
|
343 |
+
</ul>
|
344 |
+
</div>
|
345 |
+
</div>
|
346 |
+
<div class="copyright">
|
347 |
+
<p>© 2025 MCP Resource Hub. All information based on public sources. Not affiliated with Anthropic, Inc.</p>
|
348 |
+
<p>Last updated: May 6, 2025</p>
|
349 |
+
</div>
|
350 |
</div>
|
351 |
</footer>
|
352 |
|
353 |
+
<script src="script.js"></script>
|
354 |
</body>
|
355 |
</html>
|
mcp-diagram.svg
ADDED
|
script.js
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
// MCP Website JavaScript
|
2 |
+
|
3 |
+
document.addEventListener('DOMContentLoaded', function() {
|
4 |
+
// Newsletter subscription form
|
5 |
+
const newsletterForm = document.getElementById('newsletter-form');
|
6 |
+
if (newsletterForm) {
|
7 |
+
newsletterForm.addEventListener('submit', function(e) {
|
8 |
+
e.preventDefault();
|
9 |
+
const email = this.querySelector('input[type="email"]').value;
|
10 |
+
|
11 |
+
// In a real implementation, this would send the email to a server
|
12 |
+
// For demonstration purposes, we'll show an alert
|
13 |
+
alert(`Thank you for subscribing with ${email}! You'll receive MCP updates soon.`);
|
14 |
+
this.reset();
|
15 |
+
});
|
16 |
+
}
|
17 |
+
|
18 |
+
// Smooth scrolling for navigation links
|
19 |
+
const navLinks = document.querySelectorAll('nav a[href^="#"]');
|
20 |
+
navLinks.forEach(link => {
|
21 |
+
link.addEventListener('click', function(e) {
|
22 |
+
e.preventDefault();
|
23 |
+
|
24 |
+
const targetId = this.getAttribute('href');
|
25 |
+
const targetElement = document.querySelector(targetId);
|
26 |
+
|
27 |
+
if (targetElement) {
|
28 |
+
window.scrollTo({
|
29 |
+
top: targetElement.offsetTop - 80,
|
30 |
+
behavior: 'smooth'
|
31 |
+
});
|
32 |
+
}
|
33 |
+
});
|
34 |
+
});
|
35 |
+
|
36 |
+
// Add active class to navigation items on scroll
|
37 |
+
const sections = document.querySelectorAll('section[id]');
|
38 |
+
window.addEventListener('scroll', function() {
|
39 |
+
const scrollPosition = window.scrollY + 150;
|
40 |
+
|
41 |
+
sections.forEach(section => {
|
42 |
+
const sectionTop = section.offsetTop;
|
43 |
+
const sectionHeight = section.offsetHeight;
|
44 |
+
const sectionId = section.getAttribute('id');
|
45 |
+
|
46 |
+
if (scrollPosition >= sectionTop && scrollPosition < sectionTop + sectionHeight) {
|
47 |
+
document.querySelector(`nav a[href="#${sectionId}"]`).classList.add('active');
|
48 |
+
} else {
|
49 |
+
document.querySelector(`nav a[href="#${sectionId}"]`).classList.remove('active');
|
50 |
+
}
|
51 |
+
});
|
52 |
+
});
|
53 |
+
|
54 |
+
// Create a simple syntax highlighting effect for code blocks
|
55 |
+
const codeBlocks = document.querySelectorAll('pre code');
|
56 |
+
codeBlocks.forEach(block => {
|
57 |
+
// Simple keyword highlighting
|
58 |
+
const keywords = ['import', 'const', 'let', 'var', 'function', 'return', 'async', 'await', 'new', 'class'];
|
59 |
+
const punctuation = ['{', '}', '[', ']', '(', ')', ',', ';', '.', ':'];
|
60 |
+
const strings = ['"', "'", '`'];
|
61 |
+
|
62 |
+
// Get the text content
|
63 |
+
let content = block.textContent;
|
64 |
+
|
65 |
+
// This is a very simple implementation - in a real-world scenario,
|
66 |
+
// you would use a proper syntax highlighting library like Prism.js or highlight.js
|
67 |
+
|
68 |
+
// For now, we'll just add a CSS class to the block to enable some basic styling
|
69 |
+
block.classList.add('syntax-highlighted');
|
70 |
+
});
|
71 |
+
});
|
security-diagram.svg
ADDED
|
styles.css
ADDED
@@ -0,0 +1,489 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* Base styles */
|
2 |
+
:root {
|
3 |
+
--primary-color: #4a6cf7;
|
4 |
+
--secondary-color: #7e53f1;
|
5 |
+
--accent-color: #ff594f;
|
6 |
+
--text-color: #333;
|
7 |
+
--text-light: #666;
|
8 |
+
--background-light: #f8f9fc;
|
9 |
+
--background-dark: #161c2d;
|
10 |
+
--box-shadow: 0 5px 15px rgba(0, 0, 0, 0.08);
|
11 |
+
--border-radius: 8px;
|
12 |
+
--font-sans: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
13 |
+
--font-mono: 'JetBrains Mono', monospace;
|
14 |
+
}
|
15 |
+
|
16 |
+
* {
|
17 |
+
margin: 0;
|
18 |
+
padding: 0;
|
19 |
+
box-sizing: border-box;
|
20 |
+
}
|
21 |
+
|
22 |
+
html {
|
23 |
+
scroll-behavior: smooth;
|
24 |
+
}
|
25 |
+
|
26 |
+
body {
|
27 |
+
font-family: var(--font-sans);
|
28 |
+
line-height: 1.6;
|
29 |
+
color: var(--text-color);
|
30 |
+
background-color: #fff;
|
31 |
+
}
|
32 |
+
|
33 |
+
.container {
|
34 |
+
width: 90%;
|
35 |
+
max-width: 1200px;
|
36 |
+
margin: 0 auto;
|
37 |
+
padding: 40px 0;
|
38 |
+
}
|
39 |
+
|
40 |
+
h1, h2, h3, h4, h5, h6 {
|
41 |
+
margin-bottom: 1rem;
|
42 |
+
line-height: 1.3;
|
43 |
+
font-weight: 700;
|
44 |
+
}
|
45 |
+
|
46 |
+
h1 {
|
47 |
+
font-size: 2.5rem;
|
48 |
+
}
|
49 |
+
|
50 |
+
h2 {
|
51 |
+
font-size: 2rem;
|
52 |
+
}
|
53 |
+
|
54 |
+
h3 {
|
55 |
+
font-size: 1.5rem;
|
56 |
+
}
|
57 |
+
|
58 |
+
p {
|
59 |
+
margin-bottom: 1.5rem;
|
60 |
+
}
|
61 |
+
|
62 |
+
a {
|
63 |
+
color: var(--primary-color);
|
64 |
+
text-decoration: none;
|
65 |
+
}
|
66 |
+
|
67 |
+
a:hover {
|
68 |
+
text-decoration: underline;
|
69 |
+
}
|
70 |
+
|
71 |
+
ul, ol {
|
72 |
+
margin-bottom: 1.5rem;
|
73 |
+
padding-left: 1.5rem;
|
74 |
+
}
|
75 |
+
|
76 |
+
.btn {
|
77 |
+
display: inline-block;
|
78 |
+
padding: 0.75rem 1.5rem;
|
79 |
+
background-color: var(--primary-color);
|
80 |
+
color: white;
|
81 |
+
border-radius: var(--border-radius);
|
82 |
+
text-decoration: none;
|
83 |
+
font-weight: 600;
|
84 |
+
transition: all 0.3s ease;
|
85 |
+
}
|
86 |
+
|
87 |
+
.btn:hover {
|
88 |
+
background-color: var(--secondary-color);
|
89 |
+
text-decoration: none;
|
90 |
+
transform: translateY(-2px);
|
91 |
+
}
|
92 |
+
|
93 |
+
.alt-bg {
|
94 |
+
background-color: var(--background-light);
|
95 |
+
}
|
96 |
+
|
97 |
+
/* Header */
|
98 |
+
header {
|
99 |
+
background: linear-gradient(135deg, var(--background-dark) 0%, #233152 100%);
|
100 |
+
color: white;
|
101 |
+
padding: 20px 0;
|
102 |
+
}
|
103 |
+
|
104 |
+
header h1 {
|
105 |
+
margin-bottom: 0.25rem;
|
106 |
+
}
|
107 |
+
|
108 |
+
.tagline {
|
109 |
+
font-size: 1.25rem;
|
110 |
+
margin-bottom: 2rem;
|
111 |
+
opacity: 0.9;
|
112 |
+
}
|
113 |
+
|
114 |
+
nav ul {
|
115 |
+
display: flex;
|
116 |
+
list-style: none;
|
117 |
+
padding: 0;
|
118 |
+
margin: 0;
|
119 |
+
}
|
120 |
+
|
121 |
+
nav ul li {
|
122 |
+
margin-right: 1.5rem;
|
123 |
+
}
|
124 |
+
|
125 |
+
nav ul li a {
|
126 |
+
color: white;
|
127 |
+
text-decoration: none;
|
128 |
+
font-weight: 500;
|
129 |
+
padding: 0.5rem 0;
|
130 |
+
transition: all 0.3s ease;
|
131 |
+
}
|
132 |
+
|
133 |
+
nav ul li a:hover {
|
134 |
+
color: var(--accent-color);
|
135 |
+
}
|
136 |
+
|
137 |
+
/* Overview section */
|
138 |
+
.intro-box {
|
139 |
+
background-color: var(--background-light);
|
140 |
+
border-left: 5px solid var(--primary-color);
|
141 |
+
padding: 1.5rem;
|
142 |
+
margin-bottom: 2rem;
|
143 |
+
border-radius: 0 var(--border-radius) var(--border-radius) 0;
|
144 |
+
}
|
145 |
+
|
146 |
+
.two-column {
|
147 |
+
display: grid;
|
148 |
+
grid-template-columns: 1fr 1fr;
|
149 |
+
gap: 2rem;
|
150 |
+
}
|
151 |
+
|
152 |
+
.quote-box {
|
153 |
+
background-color: rgba(74, 108, 247, 0.1);
|
154 |
+
padding: 2rem;
|
155 |
+
border-radius: var(--border-radius);
|
156 |
+
margin: 2rem 0;
|
157 |
+
}
|
158 |
+
|
159 |
+
blockquote {
|
160 |
+
font-style: italic;
|
161 |
+
font-size: 1.15rem;
|
162 |
+
margin-bottom: 1rem;
|
163 |
+
}
|
164 |
+
|
165 |
+
cite {
|
166 |
+
font-style: normal;
|
167 |
+
font-weight: 600;
|
168 |
+
font-size: 0.9rem;
|
169 |
+
}
|
170 |
+
|
171 |
+
/* Architecture section */
|
172 |
+
.arch-diagram {
|
173 |
+
background-color: white;
|
174 |
+
border: 1px solid #ddd;
|
175 |
+
border-radius: var(--border-radius);
|
176 |
+
padding: 1rem;
|
177 |
+
margin: 2rem 0;
|
178 |
+
text-align: center;
|
179 |
+
}
|
180 |
+
|
181 |
+
.diagram-placeholder {
|
182 |
+
background-color: #eee;
|
183 |
+
padding: 8rem 0;
|
184 |
+
margin-bottom: 1rem;
|
185 |
+
border-radius: var(--border-radius);
|
186 |
+
display: flex;
|
187 |
+
justify-content: center;
|
188 |
+
align-items: center;
|
189 |
+
font-weight: bold;
|
190 |
+
color: #666;
|
191 |
+
}
|
192 |
+
|
193 |
+
.caption {
|
194 |
+
font-size: 0.9rem;
|
195 |
+
color: var(--text-light);
|
196 |
+
margin-top: 0.5rem;
|
197 |
+
}
|
198 |
+
|
199 |
+
.components {
|
200 |
+
display: grid;
|
201 |
+
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
202 |
+
gap: 1.5rem;
|
203 |
+
margin: 2rem 0;
|
204 |
+
}
|
205 |
+
|
206 |
+
.component {
|
207 |
+
background-color: white;
|
208 |
+
padding: 1.5rem;
|
209 |
+
border-radius: var(--border-radius);
|
210 |
+
box-shadow: var(--box-shadow);
|
211 |
+
}
|
212 |
+
|
213 |
+
.tech-details {
|
214 |
+
background-color: white;
|
215 |
+
padding: 1.5rem;
|
216 |
+
border-radius: var(--border-radius);
|
217 |
+
box-shadow: var(--box-shadow);
|
218 |
+
margin: 2rem 0;
|
219 |
+
}
|
220 |
+
|
221 |
+
.tech-note {
|
222 |
+
background-color: rgba(255, 89, 79, 0.1);
|
223 |
+
padding: 1rem;
|
224 |
+
border-radius: var(--border-radius);
|
225 |
+
margin-top: 2rem;
|
226 |
+
}
|
227 |
+
|
228 |
+
/* Implementation section */
|
229 |
+
.language-grid {
|
230 |
+
display: grid;
|
231 |
+
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
|
232 |
+
gap: 1rem;
|
233 |
+
margin-bottom: 2rem;
|
234 |
+
}
|
235 |
+
|
236 |
+
.language {
|
237 |
+
background-color: var(--background-light);
|
238 |
+
padding: 1rem;
|
239 |
+
border-radius: var(--border-radius);
|
240 |
+
text-align: center;
|
241 |
+
font-weight: 600;
|
242 |
+
}
|
243 |
+
|
244 |
+
.code-block {
|
245 |
+
background-color: var(--background-dark);
|
246 |
+
border-radius: var(--border-radius);
|
247 |
+
overflow: hidden;
|
248 |
+
margin: 2rem 0;
|
249 |
+
}
|
250 |
+
|
251 |
+
pre {
|
252 |
+
padding: 1.5rem;
|
253 |
+
overflow-x: auto;
|
254 |
+
}
|
255 |
+
|
256 |
+
code {
|
257 |
+
font-family: var(--font-mono);
|
258 |
+
color: #e0e0e0;
|
259 |
+
font-size: 0.9rem;
|
260 |
+
}
|
261 |
+
|
262 |
+
.best-practices {
|
263 |
+
display: grid;
|
264 |
+
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
265 |
+
gap: 1.5rem;
|
266 |
+
margin: 2rem 0;
|
267 |
+
}
|
268 |
+
|
269 |
+
.practice {
|
270 |
+
background-color: white;
|
271 |
+
padding: 1.5rem;
|
272 |
+
border-radius: var(--border-radius);
|
273 |
+
box-shadow: var(--box-shadow);
|
274 |
+
}
|
275 |
+
|
276 |
+
.resource-link {
|
277 |
+
display: flex;
|
278 |
+
flex-wrap: wrap;
|
279 |
+
gap: 1rem;
|
280 |
+
margin: 2rem 0;
|
281 |
+
}
|
282 |
+
|
283 |
+
/* Adoption section */
|
284 |
+
.adoption-grid {
|
285 |
+
display: grid;
|
286 |
+
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
287 |
+
gap: 2rem;
|
288 |
+
margin: 2rem 0;
|
289 |
+
}
|
290 |
+
|
291 |
+
.company {
|
292 |
+
background-color: white;
|
293 |
+
padding: 1.5rem;
|
294 |
+
border-radius: var(--border-radius);
|
295 |
+
box-shadow: var(--box-shadow);
|
296 |
+
text-align: center;
|
297 |
+
}
|
298 |
+
|
299 |
+
.company-logo {
|
300 |
+
height: 100px;
|
301 |
+
background-color: #eee;
|
302 |
+
border-radius: var(--border-radius);
|
303 |
+
display: flex;
|
304 |
+
justify-content: center;
|
305 |
+
align-items: center;
|
306 |
+
margin-bottom: 1rem;
|
307 |
+
font-weight: bold;
|
308 |
+
font-size: 1.2rem;
|
309 |
+
}
|
310 |
+
|
311 |
+
.stats {
|
312 |
+
display: grid;
|
313 |
+
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
314 |
+
gap: 2rem;
|
315 |
+
margin: 2rem 0;
|
316 |
+
text-align: center;
|
317 |
+
}
|
318 |
+
|
319 |
+
.stat-number {
|
320 |
+
font-size: 3rem;
|
321 |
+
font-weight: 700;
|
322 |
+
color: var(--primary-color);
|
323 |
+
line-height: 1.2;
|
324 |
+
}
|
325 |
+
|
326 |
+
.stat-label {
|
327 |
+
font-size: 1rem;
|
328 |
+
color: var(--text-light);
|
329 |
+
}
|
330 |
+
|
331 |
+
.tool-list {
|
332 |
+
display: flex;
|
333 |
+
flex-wrap: wrap;
|
334 |
+
gap: 1rem;
|
335 |
+
margin: 2rem 0;
|
336 |
+
}
|
337 |
+
|
338 |
+
.tool {
|
339 |
+
background-color: var(--background-light);
|
340 |
+
padding: 0.75rem 1.5rem;
|
341 |
+
border-radius: var(--border-radius);
|
342 |
+
font-weight: 600;
|
343 |
+
}
|
344 |
+
|
345 |
+
/* Security section */
|
346 |
+
.security-warning {
|
347 |
+
background-color: rgba(255, 89, 79, 0.1);
|
348 |
+
padding: 1.5rem;
|
349 |
+
border-radius: var(--border-radius);
|
350 |
+
margin: 2rem 0;
|
351 |
+
border-left: 5px solid var(--accent-color);
|
352 |
+
}
|
353 |
+
|
354 |
+
.mitigation-grid {
|
355 |
+
display: grid;
|
356 |
+
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
357 |
+
gap: 1.5rem;
|
358 |
+
margin: 2rem 0;
|
359 |
+
}
|
360 |
+
|
361 |
+
.strategy {
|
362 |
+
background-color: white;
|
363 |
+
padding: 1.5rem;
|
364 |
+
border-radius: var(--border-radius);
|
365 |
+
box-shadow: var(--box-shadow);
|
366 |
+
}
|
367 |
+
|
368 |
+
.security-resources {
|
369 |
+
background-color: var(--background-light);
|
370 |
+
padding: 1.5rem;
|
371 |
+
border-radius: var(--border-radius);
|
372 |
+
margin: 2rem 0;
|
373 |
+
}
|
374 |
+
|
375 |
+
/* Resources section */
|
376 |
+
.resource-categories {
|
377 |
+
display: grid;
|
378 |
+
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
379 |
+
gap: 2rem;
|
380 |
+
margin: 2rem 0;
|
381 |
+
}
|
382 |
+
|
383 |
+
.resource-category {
|
384 |
+
background-color: white;
|
385 |
+
padding: 1.5rem;
|
386 |
+
border-radius: var(--border-radius);
|
387 |
+
box-shadow: var(--box-shadow);
|
388 |
+
}
|
389 |
+
|
390 |
+
.newsletter {
|
391 |
+
background-color: var(--secondary-color);
|
392 |
+
color: white;
|
393 |
+
padding: 2rem;
|
394 |
+
border-radius: var(--border-radius);
|
395 |
+
margin-top: 3rem;
|
396 |
+
}
|
397 |
+
|
398 |
+
.newsletter h3 {
|
399 |
+
margin-bottom: 1rem;
|
400 |
+
}
|
401 |
+
|
402 |
+
#newsletter-form {
|
403 |
+
display: flex;
|
404 |
+
gap: 1rem;
|
405 |
+
margin-top: 1.5rem;
|
406 |
+
}
|
407 |
+
|
408 |
+
#newsletter-form input {
|
409 |
+
flex: 1;
|
410 |
+
padding: 0.75rem 1rem;
|
411 |
+
border: none;
|
412 |
+
border-radius: var(--border-radius);
|
413 |
+
font-size: 1rem;
|
414 |
+
}
|
415 |
+
|
416 |
+
#newsletter-form .btn {
|
417 |
+
background-color: var(--accent-color);
|
418 |
+
}
|
419 |
+
|
420 |
+
#newsletter-form .btn:hover {
|
421 |
+
background-color: #e4483f;
|
422 |
+
}
|
423 |
+
|
424 |
+
/* Footer */
|
425 |
+
footer {
|
426 |
+
background-color: var(--background-dark);
|
427 |
+
color: white;
|
428 |
+
padding: 3rem 0;
|
429 |
+
}
|
430 |
+
|
431 |
+
.footer-content {
|
432 |
+
display: grid;
|
433 |
+
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
434 |
+
gap: 2rem;
|
435 |
+
margin-bottom: 2rem;
|
436 |
+
}
|
437 |
+
|
438 |
+
.footer-section h3 {
|
439 |
+
margin-bottom: 1.5rem;
|
440 |
+
color: white;
|
441 |
+
}
|
442 |
+
|
443 |
+
.footer-section ul {
|
444 |
+
list-style: none;
|
445 |
+
padding: 0;
|
446 |
+
}
|
447 |
+
|
448 |
+
.footer-section ul li {
|
449 |
+
margin-bottom: 0.5rem;
|
450 |
+
}
|
451 |
+
|
452 |
+
.footer-section a {
|
453 |
+
color: #a0b4fe;
|
454 |
+
}
|
455 |
+
|
456 |
+
.copyright {
|
457 |
+
border-top: 1px solid rgba(255, 255, 255, 0.1);
|
458 |
+
padding-top: 2rem;
|
459 |
+
text-align: center;
|
460 |
+
color: rgba(255, 255, 255, 0.6);
|
461 |
+
font-size: 0.9rem;
|
462 |
+
}
|
463 |
+
|
464 |
+
/* Responsive styles */
|
465 |
+
@media (max-width: 768px) {
|
466 |
+
h1 {
|
467 |
+
font-size: 2rem;
|
468 |
+
}
|
469 |
+
|
470 |
+
h2 {
|
471 |
+
font-size: 1.75rem;
|
472 |
+
}
|
473 |
+
|
474 |
+
.two-column {
|
475 |
+
grid-template-columns: 1fr;
|
476 |
+
}
|
477 |
+
|
478 |
+
nav ul {
|
479 |
+
flex-direction: column;
|
480 |
+
}
|
481 |
+
|
482 |
+
nav ul li {
|
483 |
+
margin-bottom: 0.5rem;
|
484 |
+
}
|
485 |
+
|
486 |
+
#newsletter-form {
|
487 |
+
flex-direction: column;
|
488 |
+
}
|
489 |
+
}
|