diff --git a/llms_txt.tokens.inc b/llms_txt.tokens.inc
index 914f0c5b7414976f642d433bc65f1ebb6bfab40c..0867d1cc9e1019d0b78d93e1971a9933b83b19a6 100644
--- a/llms_txt.tokens.inc
+++ b/llms_txt.tokens.inc
@@ -26,6 +26,7 @@
  * USA.
  */
 
+use Drupal\Core\Cache\CacheableMetadata;
 use Drupal\Core\Menu\MenuTreeParameters;
 use Drupal\Core\Render\BubbleableMetadata;
 use Drupal\system\Entity\Menu;
@@ -34,27 +35,48 @@
  * Implements hook_token_info().
  */
 function llms_txt_token_info(): array {
-  $types = [];
-  $types['llms_txt_markdown_menu'] = [
+  $info = [
+    'types' => [],
+    'tokens' => [],
+  ];
+  $info['types']['llms_txt_markdown_menu'] = [
     'name' => t('llms.txt: Markdown menu'),
-    'description' => t('Render menu items in markdown for llms.txt'),
+    'description' => t('Tokens that render menu items as Markdown-formatted lists for inclusion in llms.txt files.'),
   ];
+  if (\Drupal::moduleHandler()->moduleExists('markdownify_views')) {
+    $info['types']['llms_txt_views'] = [
+      'name' => t('llms.txt: Views'),
+      'description' => t('Tokens that render Views output as Markdown content for llms.txt files. Views must be tagged with "llms_txt_section" and configured to produce Markdown-compatible output (e.g., urls should use absolute URLs suffixed with .md for markdown versions). Contextual arguments are not supported.'),
+    ];
+    /** @var \Drupal\views\ViewEntityInterface[] $views */
+    $views = \Drupal::service('entity_type.manager')
+      ->getStorage('view')
+      ->loadByProperties(['tag' => 'llms_txt_section']);
+    foreach ($views as $view) {
+      foreach ($view->get('display') as $display) {
+        $info['tokens']['llms_txt_views'][$view->id() . ':' . $display['id']] = [
+          'name' => sprintf('%s (%s)', $view->label(), $display['display_title']),
+          'description' => t('Renders the "@display" display of the "@view" view as Markdown content.', [
+            '@display' => $display['display_title'],
+            '@view' => $view->label(),
+          ]),
+        ];
+      }
+    }
+  }
 
   /** @var \Drupal\system\MenuInterface[] $menus */
   $menus = Drupal::entityTypeManager()->getStorage('menu')->loadMultiple();
-
-  $tokens = [];
   foreach ($menus as $menu) {
-    $tokens[$menu->id()] = [
+    $info['tokens']['llms_txt_markdown_menu'][$menu->id()] = [
       'name' => $menu->label(),
-      'description' => $menu->getDescription(),
+      'description' => $menu->getDescription() ?: t('Renders the "@menu" menu as a Markdown-formatted list.', [
+        '@menu' => $menu->label(),
+      ]),
     ];
   }
 
-  return [
-    'types' => $types,
-    'tokens' => ['llms_txt_markdown_menu' => $tokens],
-  ];
+  return $info;
 }
 
 /**
@@ -113,6 +135,20 @@ function llms_txt_tokens(string $type, array $tokens, array $data, array $option
       $replacements[$tokens[$menu_name]] = implode(PHP_EOL, $lines);
     }
   }
+  elseif ($type === 'llms_txt_views' && \Drupal::moduleHandler()->moduleExists('markdownify_views')) {
+    foreach ($tokens as $name => $original) {
+      [$view_id, $display_id] = explode(':', $name, 2);
+      if (!empty($view_id) && !empty($display_id)) {
+        $build = views_embed_view($view_id, $display_id);
+        if (is_array($build)) {
+          $html = \Drupal::service('renderer')->renderInIsolation($build);
+          $bubbleable_metadata->addCacheableDependency(CacheableMetadata::createFromRenderArray($build));
+          $markdown = \Drupal::service('markdownify.html_converter')->convert((string) $html);
+          $replacements[$original] = $markdown;
+        }
+      }
+    }
+  }
 
   return $replacements;
 }
